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 :

Fusion de deux tables SAS


Sujet :

Débutez

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 12
    Points : 7
    Points
    7
    Par défaut Fusion de deux tables SAS
    Bonjour à tous,

    J'ai deux tables sas avec:

    1) 773 observations
    2) 704 observations

    Ces deux tables ont une variable commune : l'identifiant.

    Je voudrais les fusionner de sorte à me retrouver avec une table de 773 individus.

    J'ai essayé de faire ça avec un merge mais j'ai à la fin dans ma table 704 individus, j'en perds 69 ainsi.

    Quelqu'un pourrait-il m'aider à faire ce programme? Merci d'avance!

  2. #2
    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 : 46
    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
    Bonjour Aida.
    Tu as utilisé des marqueurs IN= dans ton MERGE et dans un IF ?
    Normalement, si tu fais juste DATA c ; MERGE a b ; BY id ; RUN ; tu devrais obtenir une table qui compte au moins 773 observations, voire davantage.
    Il y a des doublons sur ton identifiant ?
    Bon courage.
    Olivier
    Bon courage.
    Olivier

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Merci Olivier pour cette réponse.

    Non je n'ai pas utilisé de marqueurs. J'ai juste fais ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Data Fichiers_contacts;
    merge Base_773 Fichiers_contacts1;
    by ident;
    run;
    Il n'y a pas de doublon sur les identifiants.

    En fait les 704 sont inclus dans les 773.

    Quand j'exécute ce programme, ma base Fichiers_contacts ne prend en compte que les individus dont Ident.Base_773= Ident.Fichiers_contacts1 (704). Alors que moi je voudrais que ma base finale créee contienne 773 individus, que j'ai des données manquantes à la place des identifiants manquant.

  4. #4
    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 : 46
    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
    Et les deux tables en entrée sont bien triées selon IDENT ?
    Bon courage.
    Olivier

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Oui , elles étaient triées avant.

    J'ai l'habitude d'utiliser merge pour fusionner mes tables (mais uniquement sur des tables avec le même nombre d’observation) et ça marche, sauf dans ce cas ci où les effectifs des deux tables sont différents.

  6. #6
    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 : 46
    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
    Il doit y avoir un truc avec les identifiants alors.
    Normalement, un MERGE conserve par défaut toutes les observations présentes dans au moins une des deux tables jointes. On le vérifie dans cet exemple
    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
    DATA table1 ;
      DO id=1 TO 100 ;
        autreVarTable1 = "A" ;
        OUTPUT ;
      END ;
    RUN ;
    DATA table2 ;
      DO id=30 TO 70 ;
        autreVarTable2 = "B" ;
        OUTPUT ;
      END ;
    RUN ;
    PROC SORT DATA=table1 ; BY id ; RUN ;
    PROC SORT DATA=table2 ; BY id ; RUN ;
    DATA tableResultat ;
      MERGE table1 table2 ;
      BY id ;
    RUN ;
    Je me suis limité au cas où les identifiants de la table 2 se retrouvent tous dans la table 1. Mais si on fait dans table 2 une boucle pour id de 90 à 120, on verra que le MERGE conserve tout.

    Je pense donc qu'il y a un truc louche dans vos données, ou une option bizarre quelque part.
    Bon courage.
    Olivier

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Oui peut-être qu'il y a un problème avec les identifiant... mais ça m'étonnerait quand même...

    Je ne comprend pas cette partie de ton programme : autreVarTable1 = "A"

  8. #8
    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 : 46
    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
    C'est juste pour créer une autre variable que l'identifiant dans chaque table, comme ça on peut constater que les lignes sans correspondance ont bien, par défaut, des valeurs manquantes.

    Donc tu n'as pas de WHERE ou de IF dans ton étape DATA avec le MERGE, ni dans les procédures SORT qui précèdent ? C'est bien mystérieux !
    Bon courage.
    Olivier

  9. #9
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Ok! Mystérieux ou c'est moi qui n'est pas encore bien maîtriser cette méthode.
    En tout cas merci pour le temps et les réponses que vous consacrez à mes questions. Je continue de creuser...

    Ps : Désolée pour les fautes... Je voulais dire c'est peut-être moi qui n'ai pas bien compris cette procédure...

  10. #10
    Membre éclairé

    Femme Profil pro
    SAS FRANCE - Support Clients France et Europe
    Inscrit en
    Février 2010
    Messages
    289
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : SAS FRANCE - Support Clients France et Europe
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 289
    Points : 886
    Points
    886
    Par défaut
    Bonjour,

    j'en déduis que dans les tables, l'identifiant n'est pas une clé unique : il y a plusieurs lignes avec le même identifiant.
    Du coup la jointure doit être faites par PROC SQL, avec un FULL JOIN par exemple.
    Cordialement,

    --
    Géraldine CADE-DESCHAMPS
    Consultante ▪ Support Clients SAS
    Tel: +33 1 60 62 12 12 ▪ support@sas.com
    www.sas.com/france
    SAS® … THE POWER TO KNOW®

  11. #11
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Si l'identifiant est bien une clé unique; il n'y a pas de lignes avec le même identifiant

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

Discussions similaires

  1. Soustraire deux tables SAS
    Par kopouge dans le forum Outils BI
    Réponses: 1
    Dernier message: 21/02/2012, 14h43
  2. [AC-2007] fusion de deux tables
    Par ALEX80800 dans le forum Modélisation
    Réponses: 2
    Dernier message: 08/01/2012, 12h26
  3. [DATA] fusion de deux tables
    Par petit-ours dans le forum SAS Base
    Réponses: 2
    Dernier message: 07/09/2010, 15h53
  4. fusion de deux tables
    Par petit-ours dans le forum SAS Base
    Réponses: 2
    Dernier message: 27/07/2010, 08h38
  5. Fusion de deux tables : MERGE ou SET
    Par Flynt dans le forum SAS Base
    Réponses: 10
    Dernier message: 23/06/2008, 10h51

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