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 :

Fusion plus de 2 tables avec proc sql [SQL]


Sujet :

SAS Base

  1. #1
    Membre du Club
    Femme Profil pro
    Responsable marketing opérationnel
    Inscrit en
    Avril 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable marketing opérationnel
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Avril 2011
    Messages : 58
    Points : 59
    Points
    59
    Par défaut Fusion plus de 2 tables avec proc sql
    Bonjour,

    je travaille avec 3 tables qui possèdent toutes les 3 une variable qui pourrait me servir de clé de fusion. Ma question est toute bête: peut-on dans une proc sql fusionnner ces 3 tables en même temps pour récupérer au final les observations communes entre les 3 tables?

    Et tant que j'y suis, j'ai une autre question: lorsque l'on fusionne deux tables (table1 et table2) avec une proc sql, est-ce que l'on peut en même temps calculer une variable qui est le produit d'une première variable issue de la table1 et d'une seconde variable qui est issue de la table2?

    Vous l'aurez sans doute remarqué, la proc sql et moi ne nous connaissons pas depuis longtemps!

    Merci de votre aide.

    Olive.

  2. #2
    Membre émérite

    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
    Points : 2 329
    Points
    2 329
    Par défaut
    oui pour les deux questions
    on peut faire beaucoup de choses en SQL

  3. #3
    Membre éprouvé
    Homme Profil pro
    Statisticien/développeur BI
    Inscrit en
    Janvier 2012
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Statisticien/développeur BI
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2012
    Messages : 326
    Points : 1 142
    Points
    1 142
    Par défaut
    Citation Envoyé par bahraoui Voir le message
    oui pour les deux questions
    on peut faire beaucoup de choses en SQL
    tout comme avec une étape DATA avec un Merge
    Après ça dépend des tables sources et de ce que l'on veux faire ...

  4. #4
    Membre du Club
    Femme Profil pro
    Responsable marketing opérationnel
    Inscrit en
    Avril 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable marketing opérationnel
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Avril 2011
    Messages : 58
    Points : 59
    Points
    59
    Par défaut
    Excellentes nouvelles!
    Je pense me coucher moi bête ce soir, ça n'arrive pas tous les jours!

    J'écris habituellement une fusion entre 2 tables comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    PROC SQL ;
    CREATE TABLE table_finale AS 
     SELECT t1.*, t2.*
     FROM table1 t1 INNER JOIN table2 t2
     ON t1.ma_clef=t2.ma_clef
    QUIT;
    Que doit-on changer concrètement pour faire la même chose avec 3 tables?

    De même, d'habitude, pour calculer une nv variable après ma fusion, j'aurais ajouté une étape DATA:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DATA table_finale;
     SET table_finale;
     var_new=compress(var1!!var2!!var3);
    RUN;
    Comment écrire concrètement les choses pour qu'en même temps que la fusion , ce calcul soit effectué?

    Merci de votre aide.

    Olive.

  5. #5
    Membre habitué

    Homme Profil pro
    Consultant Support Client SAS
    Inscrit en
    Mai 2011
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Support Client SAS
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 94
    Points : 180
    Points
    180
    Par défaut
    Bonjour,

    Voici un petit exemple de code qui répond à vos deux questions:

    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
    data table1;
    input x y;
    cards;
    1 2
    5 3
    2 6
    ;
    run;
     
    data table2;
    input x w;
    cards;
    2 520
    1 120
    4 100
    ;
    run;
     
    data table3;
    input x z $;
    cards;
    1 a
    3 b
    2 c
    ;
    run;
     
    proc sql;
    select a.x, y, w, z, y+w as new
    from table1 as a, table2 as b, table3 as c
    where a.x=b.x and a.x=c.x;
    quit;
    J'espère que ce bout de code vous aidera.

    Cordialement,
    Jérémy NOEL

  6. #6
    Membre du Club
    Femme Profil pro
    Responsable marketing opérationnel
    Inscrit en
    Avril 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable marketing opérationnel
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Avril 2011
    Messages : 58
    Points : 59
    Points
    59
    Par défaut
    Génial!
    Et... encore une question...
    Existe-t-il des types de calcul qui ne sont pas faisables en même temps qu'une fusion ou bien peut-on faire exactement tout ce que l'on ferait dans une étape DATA?

    Merci encore!

    Olive.

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

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Pour moins dérouter Olive et encourager une syntaxe plus moderne (les jointures où on met toutes les tables en vrac dans FROM et les conditions de jointure dans WHERE ne sont plus en odeur de sainteté depuis la norme SQL 92), continuons avec INNER JOIN.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    proc sql;
    SELECT a.x, y, w, z, y+w AS new
    FROM table1 AS a
    INNER JOIN
    table2 AS b
    ON a.x=b.x 
    INNER JOIN table3 AS c
    ON a.x=c.x;
    quit;
    Côté calculs, tout ce qui peut se faire dans l'étape DATA, sauf les Arrays et les fonctions reposant sur l'ordre de lecture des lignes (LAG, DIF).

  8. #8
    Rédacteur

    Homme Profil pro
    SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Inscrit en
    Avril 2009
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 2 497
    Points : 6 064
    Points
    6 064
    Par défaut
    En tant que fervent supporter du SQL je dirai que tu peux faire plus qu'avec MERGE. Tu peux même agréger comme une proc MEANS en même temps de la fusion. Tu peux trier les données en même temps.

    Bien entendu le MERGE garde quelques avantages mais le raisonnement en SQL est plus intuitif.

  9. #9
    Membre du Club
    Femme Profil pro
    Responsable marketing opérationnel
    Inscrit en
    Avril 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable marketing opérationnel
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Avril 2011
    Messages : 58
    Points : 59
    Points
    59
    Par défaut
    Bon, comme je me suis couchée moins bête, j'ai vachement bien dormi!
    Mais... j'ai encore une question: comme je le disais au tout début, en plus de la fusion de tables, j'ai besoin de calculer une nouvelle variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DATA table_finale;
     SET table_finale;
     var_new=compress(var1!!var2!!var3);
    RUN;
    Comment faire pour inclure ça dans la SQL de ma fusion? c'est possible?

    Merci encore.

    Olive.

  10. #10
    Membre éprouvé
    Homme Profil pro
    Statisticien/développeur BI
    Inscrit en
    Janvier 2012
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Statisticien/développeur BI
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2012
    Messages : 326
    Points : 1 142
    Points
    1 142
    Par défaut
    Tout simplement (en reprenant l'exemple ci-dessus)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    proc sql;
    SELECT a.x, y, w, z, y+w AS new, cat(a.x,b.w,c.z) AS newvar
    FROM table1 AS a
    INNER JOIN
    table2 AS b
    ON a.x=b.x 
    INNER JOIN table3 AS c
    ON a.x=c.x;
    quit;

  11. #11
    Membre du Club
    Femme Profil pro
    Responsable marketing opérationnel
    Inscrit en
    Avril 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable marketing opérationnel
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Avril 2011
    Messages : 58
    Points : 59
    Points
    59
    Par défaut
    Encore 1000 fois merci à tous pour vos réponses si précieuses!
    Ce forum est vraiment d'une très grande aide. Une petite mine d'or!

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/02/2014, 16h40
  2. Chargement d'un XML en tables avec PL/SQL
    Par jenlin dans le forum PL/SQL
    Réponses: 7
    Dernier message: 21/03/2011, 12h55
  3. [Macro] Libellé macro-variable avec proc sql
    Par auredura dans le forum Macro
    Réponses: 2
    Dernier message: 03/09/2008, 12h46
  4. Ajouter une colonne avec proc sql
    Par green_fr dans le forum SAS Base
    Réponses: 3
    Dernier message: 08/07/2008, 10h13
  5. "fusion" de trois tables avec traitement SQL
    Par Requin15 dans le forum Langage SQL
    Réponses: 13
    Dernier message: 09/11/2006, 21h34

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