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 avec left join


Sujet :

SAS Base

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2015
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Janvier 2015
    Messages : 31
    Points : 9
    Points
    9
    Par défaut Jointure avec left join
    Salut,
    Je pensais que left join retournait toujours le même nombre de lignes que la table à gauche.
    L'exemple suivant donne plus de lignes que la table de gauche.
    Est-ce que l'un d'entre vous peut m'expliquer pourquoi stp ?

    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
    data essai_1;
    input id nom$ sexe$ contrat annee;
    cards;
    1 Mendy M 12 2017
    1 Mendy M 12 2017
    2 Mendy M 12 2018
    2 Mendy M 12 2018
    ;
    run;
    data essai_2;
    input id  S annee;
    cards;
    1 20 2017
    1 20 2017
    2 30 2018
    ;
    run;
    proc print data=essai_1;
    run;
    proc print data=essai_2;
    run;
    proc sql;
    	create table essai as select
    	essai_1.id as id1,
    	essai_1.nom as nom1,
    	essai_1.sexe as sexe1,
    	essai_1.contrat as contrat1,
    	essai_1.annee as annee1,
    	essai_2.id as id2,
    	essai_2.S as S2,
    	essai_2.annee as annee2
    	from essai_1 left join essai_2
    	on essai_1.id = essai_2.id
    	;
    quit;
    proc print data=essai;
    run;

  2. #2
    Membre éprouvé
    Avatar de m.brahim
    Homme Profil pro
    SAS / BIG DATA
    Inscrit en
    Juillet 2011
    Messages
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : SAS / BIG DATA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 461
    Points : 1 119
    Points
    1 119
    Billets dans le blog
    14
    Par défaut
    Bonjour,
    l'explication est la suivante:
    Le left join est un produit cartésien qui liste l'ensemble des clés de la table gauche.
    Si dans le cas où tu cherches à avoir une table résultat avec le même nombre de lignes que la table de gauche, la solution est la suivante:

    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
     
    data essai_1;
    input id nom$ sexe$ contrat annee;
    cards;
    1 Mendy M 12 2017
    1 Mendy M 12 2017
    2 Mendy M 12 2018
    2 Mendy M 12 2018
    3 Mendy M 12 2018
    ;
    run;
    data essai_2;
    input id  S annee;
    cards;
    1 20 2017
    1 20 2017
    2 30 2018
    ;
    run;
    data test1;
    set essai_1;
    id1=id;
    run;
     
    data test2;
    set essai_2;
    id2=id;
    S2 = S;
    annee2 = annee;
    run;
     
    data test(drop=id);
    merge test1(in=a  rename=(
    	                   nom = nom1
    	                   sexe = sexe1
    	                   contrat = contrat1
    	                   annee = annee1))
          test2(in=b drop =s annee);
     
    by id ;
    if a;
    run;
    Cordialement
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia....avance?uid=162

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2015
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Janvier 2015
    Messages : 31
    Points : 9
    Points
    9
    Par défaut
    Merci pour cette réponse.
    Ca marche effectivement.
    Mais est-ce qu'il ne faut pas normalement faire une proc sort avant le merge ?
    (mes tables réelles sont très volumineuses et le proc sort est trop long ...)

    Et surtout je dois "merger" trois tables. C'est pour celà que je préfère utiliser sql ...

Discussions similaires

  1. probleme de jointure avec left join
    Par carmen256 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 02/09/2010, 12h57
  2. Problème de jointure avec INNER JOIN et LEFT OUTER JOIN
    Par tonio-lille dans le forum Langage SQL
    Réponses: 4
    Dernier message: 10/02/2006, 12h45
  3. Plantage Mysql avec LEFT JOIN
    Par verticka dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/09/2005, 11h45
  4. requete avec left join et group by
    Par slc dans le forum Requêtes
    Réponses: 2
    Dernier message: 14/09/2004, 18h03
  5. Export d'une vue avec LEFT JOIN
    Par schnourf dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/05/2003, 13h57

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