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 particulier sans perte, sans repetition


Sujet :

SAS Base

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2011
    Messages : 45
    Points : 25
    Points
    25
    Par défaut Merge particulier sans perte, sans repetition
    Bonjour,
    J'ai un merge a faire entre plusieurs tables et qui ont comme identifiant commun, patid_id visit...je peux avoir plusieurs visit par patid_id mais le nombre de visit peut differer entre les deux tables, et je ne souahite pas que les varaibles non communes au deux tables se repetent, ce qui se produit lorsque je les merge normalement, y a t'il moyen d'obtenir le resulstats voulus facilement avec un merge ou sql ?
    merci
    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
    19
    20
    21
    22
    23
    24
    25
    26
    data test1;
    input patid_id $5. visit $5. var1 $10. ;
    cards;
    00001 C001 val1
    00001 C001 val2
    00001 C001 val3
    00001 C002 val4
    00001 C002 val5
    00001 C003 val6
    00001 C003 val7
    00001 C005 val8
    ;run;
    proc sort ; by patid_id visit ; run;
     
    data test2;
    input patid_id $5. visit $5. var2 $10. ;
    cards;
    00001 C001 val21
    00001 C001 val23
    00001 C002 val24
    00001 C003 val26
    00001 C003 val27
    00001 C003 val28
    00001 C004 val29
    ;run;
    proc sort ; by patid_id visit ; run;


    RESULTATS ATTENDUS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /*
    00001 C001 val1 val21
    00001 C001 val2 val23
    00001 C001 val3 
    00001 C002 val4 val24
    00001 C002 val5
    00001 C003 val6 val26
    00001 C003 val7 val27
    00001 C004        val29
    00001 C005 val8 
    */

  2. #2
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut merge particulier
    Bonjour,

    En jouant avec les transpositions :

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    data test1;
    input patid_id $5. visit $5. var1 $10.;
    cards;
    00001 C001 val1
    00001 C001 val2
    00001 C001 val3
    00001 C002 val4
    00001 C002 val5
    00001 C003 val6
    00001 C003 val7
    00001 C005 val8
    ;
    run;
     
    proc sort data=test1;
      by patid_id visit; 
    run;
     
    proc transpose data=test1 out=test1_t;
      var var1;
      by patid_id visit;
    run;
     
    data test2;
    input patid_id $5. visit $5. var2 $10.;
    cards;
    00001 C001 val21
    00001 C001 val23
    00001 C002 val24
    00001 C003 val26
    00001 C003 val27
    00001 C003 val28
    00001 C004 val29
    ;
    run;
     
    proc sort; 
      by patid_id visit; 
    run;
     
    proc transpose data=test2 out=test2_t;
      var var2;
      by patid_id visit;
    run;
     
    data test3_t;
      set test1_t test2_t;
    run;
     
    proc sort data=test3_t; 
      by patid_id visit; 
    run;
     
    proc print data=test3_t noobs;
    run;
     
    /*
    patid_id    visit    _NAME_    COL1     COL2     COL3
     
     00001      C001      var1     val1     val2     val3
     00001      C001      var2     val21    val23
     00001      C002      var1     val4     val5
     00001      C002      var2     val24
     00001      C003      var1     val6     val7
     00001      C003      var2     val26    val27    val28
     00001      C004      var2     val29
     00001      C005      var1     val8
    */
     
    proc transpose data=test3_t prefix=var out=test3(drop=_NAME_);
      var col1-col3;
      by patid_id visit; 
    run;
     
    data test3;
      set test3;
      if var1 ne "" or var2 ne "";
    run;
     
    proc print data=test3 noobs;
    run;
     
    /*
    patid_id    visit    var1     var2
     
     00001      C001     val1     val21
     00001      C001     val2     val23
     00001      C001     val3
     00001      C002     val4     val24
     00001      C002     val5
     00001      C003     val6     val26
     00001      C003     val7     val27
     00001      C003              val28
     00001      C004     val29
     00001      C005     val8
    */
    Cordialement,

Discussions similaires

  1. MERGE sans clause WHEN NOT MATCHED
    Par Patmane dans le forum Oracle
    Réponses: 7
    Dernier message: 29/04/2009, 17h02
  2. resultat sans repetition ?
    Par walou dans le forum Requêtes
    Réponses: 1
    Dernier message: 01/08/2007, 15h42
  3. Merge avec deux vector, sans doublons ?
    Par b Oo dans le forum SL & STL
    Réponses: 8
    Dernier message: 06/11/2006, 23h00

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