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 :

Merge avec 2 variables


Sujet :

SAS Base

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Mai 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 57
    Par défaut
    Bonjour,
    j'ai 2 tables tab1 et tab2 je souhaite que ma tab1 soit complétée par la tab2 en fonction de 2 variables v1 v2.
    Je m'explique

    tab1:
    v1 v2
    a 3
    b 2
    d 5
    h 6

    tab2
    v1 v2 v3
    a 3 33
    b 2 10
    c 4 66
    d 5 47

    je souhaite obtenir:
    resultat
    v1 v2 v3
    a 3 33
    b 2 10
    d 5 47
    h 6

    je ne veux pas que la 3ème ligne de la tab2 soit ajoutée à ma table résultat.
    Comment faire? Merci d'avance

    Pour bien comprendre, je souhaite que quelque soit la tab2, la table resultat est le même nombre de ligne que la tab1.

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur Pilotage
    Inscrit en
    Avril 2009
    Messages
    405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur Pilotage
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 405
    Par défaut
    Bjr,

    J'espère que ca répond à votre problèmatique

    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
     
    data tab1 ; 
    input v1 $ v2 ; 
    cards ; 
    a 3
    b 2
    d 5
    h 6 
    ; 
    run ; 
     
    data tab2 ; 
    input v1 $ v2 v3 ; 
    cards ; 
    a 3 33
    b 2 10
    c 4 66
    d 5 47
    ; 
    run ; 
     
    proc sql ; 
    create table resultat as
    select A.v1 , A.v2 , B.v3 
    from tab1 A LEFT JOIN tab2 B ON 
    ( A.v1 = B.v1 AND A.v2 = B.v2 );
    quit;

  3. #3
    Membre averti
    Femme Profil pro
    Inscrit en
    Mai 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 57
    Par défaut
    - Ca a l'air de fonctionner.
    J'utilisais mais j'ignore pourquoi j'avais des lignes supplémentaires...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    merge tab1 (IN=A)
    tab2(IN=B); 
     by v1 v2;
    if A;
    run;

  4. #4
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Par défaut
    pour moi la proc sql proposée et ton étape data me donnent le même résultat :

    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
     
    DATA tab1 ; 
    input v1 $ v2 ; 
    cards ; 
    a 3
    b 2
    d 5
    h 6 
    ; 
    run ; 
     
    proc sort ; by v1 v2;run;
     
    DATA tab2 ; 
    input v1 $ v2 v3 ; 
    cards ; 
    a 3 33
    b 2 10
    c 4 66
    d 5 47
    ; 
    run ; 
     
    proc sort ; by v1 v2;run;
     
     
    DATA resultat1;
    merge tab1 (IN=A)
    tab2(IN=B);
    BY v1 v2;
    IF A;
    run;
     
     
    proc sql ; 
    CREATE TABLE resultat AS
    SELECT A.v1 , A.v2 , B.v3 
    FROM tab1 A LEFT JOIN tab2 B ON 
    ( A.v1 = B.v1 AND A.v2 = B.v2 );
    quit;
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  5. #5
    Membre averti
    Femme Profil pro
    Inscrit en
    Mai 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 57
    Par défaut
    en faite le problème est que si dans tab2 si j'ajoute une ligne b 2 11 alors dans résultat, j’obtiens une ligne supplémentaire... J'aimerais que lorsque, comme c'est le cas ici, il a le choix entre 2, il ne merge pas les 2 lignes mais renvoie rien et laisse b 2 seul dans la table resultat.
    Est possible?

  6. #6
    Membre Expert

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Par défaut
    tu peux dédoublonner les tables(sort nodupkey) avant la fusion (merge ou sql).

  7. #7
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Par défaut
    oui mais il te faut des étapes supplimentaires; tu peux utiliser la fonction count dans la proc SQL pour repérer les lignes qui se répètent et les traiter à part ou proc sort nodupkey.
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  8. #8
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Par défaut
    Bon aller;
    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
     
    DATA tab1 ; 
    input v1 $ v2 ; 
    cards ; 
    a 3
    b 2
    d 5
    h 6 
    ; 
    run ; 
     
    proc sort ; by v1 v2;run;
     
    DATA tab2 ; 
    input v1 $ v2 v3 ; 
    cards ; 
    a 3 33
    b 2 10
    c 4 66
    d 5 47
    b 2 11
    ; 
    run ; 
    proc sql;
    create table tab2_bis  as select v1,v2,case 
    											when count(*) >1 then .
    											else v3 
    											end as v3
    from tab2 
    group by v1, v2;
    quit;
     
    proc sort nodupkey; by v1 v2  ;run;
     
     
    DATA resultat1;
    merge tab1 (IN=A)
    tab2_bis(IN=B);
    BY v1 v2;
    IF A;
    run;
     
     
    proc sql ; 
    CREATE TABLE resultat AS
    SELECT A.v1 , A.v2 , B.v3 
    FROM tab1 A LEFT JOIN tab2 B ON 
    ( A.v1 = B.v1 AND A.v2 = B.v2 );
    quit;
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Merge avec sélection de variables ?
    Par Froggy007 dans le forum R
    Réponses: 2
    Dernier message: 26/09/2011, 19h21
  2. [DATA] merge avec variables ayant des formats
    Par AlexFred dans le forum SAS Base
    Réponses: 15
    Dernier message: 23/12/2009, 11h34
  3. Merge avec variables
    Par kluh dans le forum Oracle
    Réponses: 18
    Dernier message: 25/07/2005, 14h31
  4. Comparaison d'un registre 8 bits avec une variable 32 bits
    Par tupperware dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 15/10/2002, 10h25
  5. Désigner une variable avec une variable?
    Par littleman dans le forum Paradox
    Réponses: 4
    Dernier message: 12/08/2002, 11h21

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