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

Forum général SAS Discussion :

Jointure entre plusieurs tables avec une condition double


Sujet :

Forum général SAS

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    janvier 2020
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : janvier 2020
    Messages : 41
    Points : 22
    Points
    22
    Par défaut Jointure entre plusieurs tables avec une condition double
    Bonjour à tous et à toutes,

    Je suis actuellement étudiant, et je dois effectuer une analyse sous sas ou j'ai plusieurs fichiers à joindre ensemble afin de pouvoir effectuer cette analyse.

    Ainsi, j'ai importer mes tables et fait une pré-selection des variables que je voulais.

    J'ai effectué dans un premier temps le script suivant qui fonctionne très bien (cette table va nous servir pour après) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    proc sql;
    create table etustat.bddb as
    SELECT s0q1, s0q2, s14q2, s14q3
    FROM etustat.bdd14;
    run;
    Une fois cette table créé, j'ai réaliser le script suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    proc sql;
    create table etustat.bddglobal as
    SELECT b7.s0q1,b7.s0q2, bdd1.s02q4, bdd1.s02q10, bdd1.s02q13, bdd1.s11q114, b7.s07q1, b1413.s14q4, bddb.s14q2, bddb.s14q3
    FROM etustat.bdd7 b7
    LEFT JOIN etustat.bdd1413 b1413 ON (b7.s0q1=b1413.s0q1 AND b7.s0q2=b1413.s0q2)
    LEFT JOIN etustat.bddb bddb ON (b1413.s0q1=bddb.s0q1 AND b1413.s0q2=bddb.s0q2)
    LEFT JOIN etustat.bddessrind bdd1 ON (bddb.s0q1=bdd1.s0q1 AND bddb.s0q2=bdd1.s0q2);
    run;
    Dans ma table bddessrind il y a 14 160 lignes, et dans les autres tables il y a 70 140 lignes.

    En exécutant le second code (le code que j'ai pu effectué), j'ai 9 138 780 lignes (j'ai peur qu'il fasse un produit cartésien).

    Je voulais donc savoir si c'est normal si je trouves autant de lignes ou pas ? Si non, avez vous une solution pour qu'il y ait un nombre de lignes correct ?

  2. #2
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    avril 2008
    Messages
    1 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : avril 2008
    Messages : 1 972
    Points : 4 327
    Points
    4 327
    Par défaut
    Bonjour.
    Comme on ne sait pas exactement ce que vous cherchez, difficile de vous dire si le résultat est bon ou pas.
    Si le volume de la table en sortie vous choque, c'est peut-être qu'il y a un problème. La piste la plus probable est qu'il manque des clés de jointure dans vos spécifications. Êtes-vous bien sûr que le couple s0q1 x s0q2 est un identifiant unique dans toutes les tables ? Si ce n'est pas le cas, le SQL fera toutes les combinaisons d'observations qui partagent le même couple de clés de jointure, d'où la possibilité d'avoir de gros volumes.

    Moralité : toujours vérifier ce qu'on peut avoir ou pas comme doublons avant de faire une jointure et idéalement, avoir le modèle conceptuel de la base de données qu'on manipule pour bien la comprendre.
    Bon courage.
    Olivier

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    janvier 2020
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : janvier 2020
    Messages : 41
    Points : 22
    Points
    22
    Par défaut
    Bonjour,

    Oui effectivement la clé de jointure correspond bien aux conditions des lefts joins, et sont des identifiants dans toutes les tables (il se peut qu'il y ai le plusieurs fois même couple dans les tables car plusieurs observations pour un même individu).

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

Discussions similaires

  1. Réponses: 16
    Dernier message: 20/05/2015, 13h36
  2. Réponses: 4
    Dernier message: 20/04/2015, 11h15
  3. Réponses: 6
    Dernier message: 29/07/2014, 13h13
  4. Réponses: 3
    Dernier message: 20/09/2013, 10h07
  5. Réponses: 3
    Dernier message: 01/04/2010, 10h04

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