IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SAS Base Discussion :

Jointure à 2 critères


Sujet :

SAS Base

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 38
    Points : 19
    Points
    19
    Par défaut Jointure à 2 critères
    Bonjour à tous,
    c'est encore le nul qui revient vous embêter

    j'ai un problème sur une jointure de tables car j'aimerais faire avec 2 critères et je connais pas la méthode.

    Voici en simplifié mon problème :

    j'ai une table à 2 variables : Prod et I
    A 7
    A 9
    A 1
    A 60
    B 45
    B 12
    B 7
    B 43
    C 2
    C 12
    D 70
    D 11

    et

    une table de référence à 4 variables : Prod, I1, I2, couleur
    A 0 10 bleu
    A 11 20 rouge
    A 21 70 vert
    B 0 10 vert
    B 11 45 orange
    B 46 200 jaune
    C 0 50 bleu
    C 51 200 rouge
    D 0 15 jaune
    D 16 100 vert

    Voilà ce que j'aimerais que SAS me fasse automatiquement.

    créer une variable couleur dans la 1ère table qui soit remplie correctement en fonction de la table de référence à savoir que si I est compris entre I1 et I2, la bonne couleur s'ajoute.
    C'est à dire que pour mon exemple, je voudrais obtenir la 1ere table ainsi modifiée :
    A 7 bleu
    A 9 bleu
    A 1 bleu
    A 60 vert
    B 45 orange
    B 12 orange
    B 7 vert
    B 43 orange
    C 2 bleu
    C 12 bleu
    D 70 vert
    D 11 jaune

    je connais un peu la fonction merge mais je ne la maîtrise pas assez pour gérer ces 2 contraintes à savoir le prod qui doit être identique des 2 côtés et à ce moment là, regarder le I qui doit être compris entre I1 et I2.

    Si c'est possible que dans couleur il y ait écrit "aucune" quand I n'appartient à aucun intervalle, je prends également

    Voilà j'espère que j'ai été clair, merci d'avance de vos réponses

  2. #2
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 30
    Points : 30
    Points
    30
    Par défaut
    Une proposition de réponse, surement pas la meilleure, avec du SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    proc sql;
    	create table table3 as
    	select *
    	from table1 as A
    	left join (
    				select couleur
    				from table2 as B
    			)
    	on A.Prod = B.prod and B.I1 <= A.I <= B.I2 ;
    quit;
     
    data table3;
    	set table3;
    	if couleur = "" then couleur="aucune";
    run;

    table 1 : dataset avec Prod et I
    table 2 : dataset avec Prod, I1, I2 et Couleur
    table3; dataset final

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    merci bien.
    effectivement en trifouillant Guide j'étais arrivé à un truc du genre

  4. #4
    Membre éclairé

    Femme Profil pro
    SAS FRANCE - Support Clients France et Europe
    Inscrit en
    Février 2010
    Messages
    289
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : SAS FRANCE - Support Clients France et Europe
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 289
    Points : 886
    Points
    886
    Par défaut
    Bonjour,

    Moi j'ai pensé à créer un format qui teste Prod et i pour trouver la valeur.
    La procédure FORMAT permet également de créer un format à partir d’une table via l’option CNTLIN. La table en entrée doit respecter une structure précise et contenir au minimum ces colonnes :
    - FMTNAME : nom du format, qui doit commencer par le signe $ pour les formats caractères
    - START : valeur brute ou début d’une tranche
    - END : valeur de fin de tranche
    - LABEL : texte à afficher


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    /* création du format */
    data data1 ;
      input Prod $1. i1 i2 couleur $30. ;
      cards ;
    A 0 10 bleu
    A 11 20 rouge
    A 21 70 vert
    B 0 10 vert
    B 11 45 orange
    B 46 200 jaune
    C 0 50 bleu
    C 51 200 rouge
    D 0 15 jaune
    D 16 100 vert
    ;
    run ;
     
     
    data fmt ;
      Length start FmtName $15. ;
      set data1 (rename=(couleur=label)) end=last ;
     
      FmtName="$Couleur" ;
      Do _i=i1 to i2 ;
        start=compress (prod !! _i) ;
    	output ;
      end ;
     
      /* Création d'une valeur "Autres cas" */
      if last then do ;
        HLO='O' ; 
        label="Inconnu" ;
        output ;
      end ;
    run ;
    proc format cntlin=fmt ;
    run ;
     
    /* test */
    data data2 ;
      length couleur $20. ;
      input Prod $1. i ;
        couleur=put ( compress(Prod !! i) , $couleur.) ;
     
      cards ;
    A 7
    A 9
    A 1
    A 60
    B 45
    B 12
    B 7
    B 43
    C 2
    C 12
    D 70
    D 11
    A 95
    ;
    run ;

    Cordialement
    Géraldine Cade Deschamps
    Support Clients SAS
    Cordialement,

    --
    Géraldine CADE-DESCHAMPS
    Consultante ▪ Support Clients SAS
    Tel: +33 1 60 62 12 12 ▪ support@sas.com
    www.sas.com/france
    SAS® … THE POWER TO KNOW®

Discussions similaires

  1. Aide méthode jointure selective (critère)
    Par lbar012001 dans le forum PL/SQL
    Réponses: 3
    Dernier message: 09/04/2010, 11h24
  2. ORACLE 9i - Jointure externe et critère
    Par saigon dans le forum SQL
    Réponses: 4
    Dernier message: 01/04/2009, 11h24
  3. Requête sur 2 tables avec critères de jointures particuliers
    Par Randomdev dans le forum Langage SQL
    Réponses: 3
    Dernier message: 20/01/2009, 18h00
  4. soucis de jointure sur plusieurs critères "left join ON . AND ON ."
    Par Moutonstar dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 24/11/2008, 17h22
  5. Recherche multi-critères, jointure et pagination
    Par baptistoux dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 06/02/2007, 14h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo