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 :

Creer une variable en fonction de la valeur d'une variable d'un autre fichier


Sujet :

SAS Base

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

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2011
    Messages : 43
    Points : 14
    Points
    14
    Par défaut Creer une variable en fonction de la valeur d'une variable d'un autre fichier
    bonjour,

    J'ai un fichier qui contient une liste de code (Fichier1, variable A) et un autre fichier qui contient aussi une liste de code (Fichier 2, variable B). Le but est de créer une variable MPI dans le fichier 2 qui prend 1 si le code de la variable B est retrouvé dans la variable A du fichier 1, sinon 0.

    comment puis je faire en pratique?

    merci par avance

  2. #2
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 624
    Points : 3 402
    Points
    3 402
    Par défaut
    Hello;
    sa peut être ?
    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
     
     
     
     
    data tab1;
    infile cards;
    input var1 var2 $;
    cards;
    1  a
    2  b
    3  a
    4  b
    5  C
    11  C
    ;
    run;
     
     
     
    data tab2 ;
    infile cards;
    input varA varB $;
    cards;
    1  a
    1  b
    2  a
    3  b
    6  c
    12 A
    9  d
    ;
    run;
     
     
    proc sort data=tab1;
    by var1;
    run;
     
     
    proc sort data=tab2;
    by varA;
    run;
     
    data jointure;
    merge tab1 (in=A ) tab2(in=b rename=(varA =var1));
    by var1;
    if a and b then MP1=1 ;
    else if a and not b  or b and not a then MP1=2;
    run;
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

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

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2011
    Messages : 43
    Points : 14
    Points
    14
    Par défaut
    bonjour,

    non ca ne va pas car ca ajoute des lignes. Le but est de garder uniquement observations du fichier 1 et d'ajouter dans ce fichier la variable MPI qui dit "si dans la variable 1 de ce fichier il y a une valeur que tu retrouve dans la variable A de l'autre table tu mets 1 sinon 0 ou . si valeur absente".

    De plus dans mon fichier avec cette commande, il y a certaines valeurs qui étaient dans mon fichier n°2 mais pour lesquelles la variable MPI était quand mm à 0.

  4. #4
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2011
    Messages : 43
    Points : 14
    Points
    14
    Par défaut
    En français j'aurai écrit quelque chose comme cela mais je ne sais pas le traduire :
    "si la valeur de la variable 1 de la table 1 = la valeur de la variable A de la table 2 alors variable MPA=1 sinon MPI=0"

    Quelqu'un à une idée?

  5. #5
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2002
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 243
    Points : 200
    Points
    200
    Par défaut
    Hello,

    si je comprends bien tes dernières remarques, essaye ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DATA jointure2;
    	merge tab1 (IN=inA ) 
    		tab2(IN=b RENAME=(varA =var1));
    	BY var1;
    	IF inA;
    	if var2 eq varB then
    		MPI=1;
    	else
    		MPI=0;
    run;
    Je me suis fortement inspiré de la réponse de s_a_m.

    J'ai l'impression que dans son exemple, il voulait surtout que tu comprennes le principe et tu n'avais plus qu'à modifier certaines choses.

    J'espère avoir bien compris ta demande...

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

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2011
    Messages : 43
    Points : 14
    Points
    14
    Par défaut
    merci,

    j'ai essaye en effet de l'adapter à mon tableau mais n'y suis pas arrivée. J'essaie avec cette commande et vous tient au courant.

    Merci

  7. #7
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 624
    Points : 3 402
    Points
    3 402
    Par défaut
    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
     
     
    DATA tab1;
    INFILE cards;
    input var1 var2 $;
    cards;
    1  a
    2  b
    3  a
    4  b
    5  C
    11  C
    ;
    run;
     
     
     
    DATA tab2 ;
    INFILE cards;
    input varA varB $;
    cards;
    1  a
    1  b
    2  a
    3  b
    6  c
    12 A
    9  d
    ;
    run;
     
     
    proc sort DATA=tab1;
    BY var1;
    run;
     
     
    proc sort DATA=tab2;
    BY varA;
    run;
     
    DATA jointure;
    merge tab1 (IN=A ) tab2(IN=b RENAME=(varA =var1));
    BY var1;
    IF a AND b then MP1=1 ;
    else MP1=0; 
     IF a AND NOT b then delete ;*OR b AND NOT a then MP1=2;
    run;
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  8. #8
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2011
    Messages : 43
    Points : 14
    Points
    14
    Par défaut
    Ca y est mais il a fallu ruser,

    j'ai repris les commandes. Voici les 2 fichiers de départs :
    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
    DATA tab1;
    INFILE cards;
    input NIR ATC1 $;
    cards;
    1  a
    1  b
    2  c
    3  d
    3 e
    4 f
     
    ;
    run;
     
     
     
    DATA tab2 ;
    INFILE cards;
    input MPI $;
    cards;
    a
    c
    g
    z
    ;
    run;
     
     data tab2;
     set tab2;
     ATC1=MPI;
     run;
    l'idée est de faire correspondre la variable ATC de tab1 avec MPI de tab2

    J'ai repris la commade de merge

    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
    proc sort DATA=tab1;
    BY ATC1;
    run;
     
    proc sort DATA=tab2;
    BY ATC1;
    run;
     
    DATA jointure2;
    	merge tab1 (IN=A ) 
    		tab2 (IN=b );
    	BY atc1 ;
    	if a;
    	IF atc1 eq MPI then
    		MPIbis=1;
    	else
    		MPIbis=0;
    run;
    Merci

  9. #9
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2011
    Messages : 43
    Points : 14
    Points
    14
    Par défaut
    ben manque de chance, avec mes vrais tables ca ne fonctionne pas.

    j'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     MERGE statement has more than one data set with repeats of BY values.

  10. #10
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2002
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 243
    Points : 200
    Points
    200
    Par défaut
    Tu sais nous renvoyer ton code (que tu utilise sur tes vraies tables)?

    Peut on considérer que les fichiers de départ de ton post précédent sont des samples ayant la même structure que tes vraies tables?

  11. #11
    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
    ce message indique souvent que tu as des doublons dans tes tables. Des lignes qui ont plusieurs fois les modalités que tu as mis dans le BY.
    N'oubliez pas de cliquer sur lorsque votre problème est réglé !

  12. #12
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2011
    Messages : 43
    Points : 14
    Points
    14
    Par défaut
    pour le probleme du merge c'est arrangé je pense c'est que dans mes 2 tables j'avais des doublons dans la variable ATC1 sur laquelle je fais ke tri avant de merger. J'ai enlever les doublons dans ma tab2. Pour la tab1 je ne doit pas enlever les doublons.
    Mais ca ne fonctionne toujours pas. Pour la tab2 c'est exactement la meme structure. Pour la Tab1 il y a une variable en plus qui est la variable période car je suis en mesures répetées et il a des valeurs manquantes dans ATC1 car pour certaines périodes mes patients n'ont pas pris de médicaments (var ATC1).
    (je n'arrive pas à inserer mes fichiers trop gros=

    "

  13. #13
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 624
    Points : 3 402
    Points
    3 402
    Par défaut
    peux-tu poster ton code et ton message d'erreur. ?!!!
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  14. #14
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2011
    Messages : 43
    Points : 14
    Points
    14
    Par défaut
    En fait je pense que j'ai réussi à faire fonctionné ma commande.

    merci pour les astuces!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/10/2014, 22h48
  2. Réponses: 4
    Dernier message: 01/02/2013, 15h01
  3. Réponses: 7
    Dernier message: 20/02/2012, 09h01
  4. Réponses: 7
    Dernier message: 13/10/2007, 23h31

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