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

Débutez Discussion :

Simplifier une jointure de table


Sujet :

Débutez

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 24
    Points : 12
    Points
    12
    Par défaut Simplifier une jointure de table
    Bonjour,

    Je débute sur SAS et je dois faire une jointure entre deux tables "ménage" et "produit".
    La table "ménage" contient une seule variable qui identifie les ménages (il n'y a pas de doublon).
    Je souhaiterais faire une jointure à l'aide d'un merge afin d'obtenir deux tables: l'un concernant les ménages avec emprunts l'autre concernant les ménages sans emprunts.
    J'ai réussi à faire ces deux tables mais je souhaiterais savoir si il était possible de le faire plus simplement.
    Voici mon code:
    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
     
    PROC SORT DATA=DONNEES.PRODUIT ; BY IDENT; RUN;
    PROC SORT DATA=DONNEES.MENAGE; BY IDENT; RUN;
    DATA DONNEES.MENAGE_AVEC_EMPRUNT DONNEES.MENAGE.OUTPUT; 
    	MERGE 	DONNEES.PRODUIT (in=a KEEP=ANNEE DETQUA DUREMP IDENT IDENTPOS NATEMP NATURE PRMO IDENTPROD
    								where=(NATURE ='6'))
    			DONNEES.MENAGE (in=b);
    	by IDENT; 
    	if a and b then output DONNEES.MENAGE_AVEC_EMPRUNT;  
    				else output DONNEES.MENAGE.OUTPUT;
    RUN;
     
    PROC SORT DATA=DONNEES.MENAGE.OUTPUT; BY IDENT; RUN;
     
    DATA DONNEES.MENAGE_SANS_EMPRUNT;
    	MERGE 	DONNEES.MENAGE.OUTPUT (in=a)
    			DONNEES.PRODUIT (in=b  
    				KEEP=ANNEE DETQUA DUREMP IDENT IDENTPOS NATEMP NATURE PRMO IDENTPROD);
    		  by IDENT;
    		  if a and b;
    RUN;
    Je vous remercie par avance pour l'aide que vous pourrez m'apporter.

    Cordialement

  2. #2
    Membre éprouvé
    Avatar de Stackware
    Homme Profil pro
    ArchiDuc de la Sasserie
    Inscrit en
    Juillet 2013
    Messages
    439
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ArchiDuc de la Sasserie
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2013
    Messages : 439
    Points : 1 017
    Points
    1 017
    Billets dans le blog
    4
    Par défaut
    Salut,

    On pourrait faire ça avec une PROC SQL?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE AVEC AS SELECT a.col1, A.col2,..., B.col1,...
    FROM MENAGE A, PRODUITS B
    WHERE A.IDENT = B.IDENT;
     
    CREATE TABLE SANS AS SELECT a.col1, A.col2,...
    FROM MENAGE A
    WHERE A.IDENT NOT IN (
    SELECT DISTINCT B.IDENT FROM PRODUITS B
    );
    [edit] suppression de la table B du select primaire de la 2nde requête, qui était inutile [/edit]

Discussions similaires

  1. problème d'envoi de données d'une jointure de table
    Par bedo115 dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 21/12/2011, 13h18
  2. SUM sur une jointure à trois tables
    Par Rapha222 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 01/06/2009, 17h52
  3. Eliminer les rédondences dans une jointure de tables
    Par odi_9 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 19/09/2006, 17h19
  4. Optimisation d'une jointure entre 3 tables
    Par gavelin dans le forum Langage SQL
    Réponses: 4
    Dernier message: 14/12/2005, 10h52
  5. Réponses: 7
    Dernier message: 10/02/2005, 01h13

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