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 :

Merge entre deux tables


Sujet :

SAS Base

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 19
    Points : 13
    Points
    13
    Par défaut Merge entre deux tables
    bonjour,
    J'essai de faire un merge entre 2 tables Ref1 et Referentiel sous sas 9.2

    Ref1 à 450 colonnes et 150.000 lignes avec une variable en commun avec Referentiel qui a 2 colonne uniquement (var1 et var2)

    le probleme est que au final je n'obtient que 1 colonne vide
    en var2 et tout le tableau Ref1 est bien présent.
    les 2 variavbles communes sont en alphanumerique.




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    proc sort data=referentiel ;by var1;run;
    proc sort data=ref1 ;by var1;run;
    DATA fusion  ;           
         MERGE ref1 ( IN = A )
               referentiel ( IN = B ) ;           
        BY var1;
         IF A ;
    RUN ;

  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
    Pour un début renomme la variable car1 en var1 avant de faire le merge.
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    je l'ai fait ! juste avant que tu poste le message
    as tu une reponse?
    dois je changer le fiormat , informat,length?

  4. #4
    Membre éclairé
    Homme Profil pro
    responsable adjoint service stat
    Inscrit en
    Mars 2009
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : responsable adjoint service stat
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2009
    Messages : 448
    Points : 823
    Points
    823
    Par défaut
    Si var2 est toujours vide, c'est que la fusion n'a pas marché : aucune clef commune trouvée entre tes deux tables.
    Est il crédible que tes 2 tables n'aient réellement aucune clef commune ?

    Sinon une piste :
    peut être que les vars ont l'air d'avoir les mêmes valeurs dans les deux tables, mais n'ont pas les mêmes valeurs.
    Exemple : d'un côté la valeur est 2, de l'autre la valeur est 1.999999, mais du fait du format de la variable elle apparaît en 2 quand tu ouvres la table. Tu crois donc que la fusion devrait marcher... mais elle ne marche pas.

    Changer le format ou l'informat n'aura aucun effet, puisque la fusion se fait (par défaut) sur la valeur non formatée.
    Changer le length n'aura vraisemblablement aucun effet, sauf à tronquer une variable selon une règle difficilement maîtrisable.

    Pour aider au diagnostic, tu pourrais construire temporairement plusieurs tables en sortie du merge :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DATA fusion_A_seulement
     fusion_B_seulement
     fusion_A_et_B
      ;           
         MERGE ref1 ( IN = A )
               referentiel ( IN = B ) ;           
        BY var1;
         IF A and not B then output fusion_A_seulement;
        if B and not A then output fusion_B_seulement ;
        if A and B then output fusion_A_et_B ;
    RUN ;

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 28
    Points : 30
    Points
    30
    Par défaut
    salut

    +1 pour Rémi

    je rajouterais peut-être un indicateur pour une analyse plus fine et rapide

    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 fusion;
         merge ref1 ( IN = A )
                  referentiel ( IN = B ) ;
         by var1;
     
         if a and b then result = 'dans A & B';
         if a and not b then result = 'dans A seul';
         if not a and b then result = 'dans B seul';
         /* définit la longueur du result avant si besoin */
    run;
     
    /* tu analyses avec un truc du genre */
    proc sql;
      select count(1) as nb, result
      from fusion
      group by result;
    quit;
    @++

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 19
    Points : 13
    Points
    13
    Par défaut reponse solution
    Bonjour
    Après m'etre renseigner c'est ntre version de sas et kle fait qu'il soit en reseau et du coup lors de l'import en xlslx les tables subissent des modifications invisibles qui empeche de faire certain if sur les tables !!
    donc je dois remplacer mes if par des like ou autre

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

Discussions similaires

  1. Double somme (SUM) entre deux tables ?
    Par kibodio dans le forum Langage SQL
    Réponses: 5
    Dernier message: 16/02/2005, 22h26
  2. PROBLEME DE JOINTURE ENTRE DEUX TABLE
    Par DarkMax dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/01/2005, 15h11
  3. Transfert entre deux tables
    Par nyarla01 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/10/2004, 14h36
  4. [VB.NET] ComboBox lien entre deux tables
    Par VDB1 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 15/07/2004, 12h15
  5. Jointure entre deux tables et résultat
    Par Asdorve dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/06/2004, 14h50

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