Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS Base
SAS Base Forum d'entraide sur SAS base : étape data, procédures non statistiques, procédures non graphiques, SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/11/2011, 14h37   #1
Invité de passage
 
Femme
Inscription : octobre 2011
Messages : 35
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : octobre 2011
Messages : 35
Points : 1
Points : 1
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
craow87000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2011, 14h55   #2
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 011
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

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

Informations forums :
Inscription : février 2011
Messages : 1 011
Points : 1 712
Points : 1 712
Hello;
sa peut être ?
Code :
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;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/11/2011, 11h41   #3
Invité de passage
 
Femme
Inscription : octobre 2011
Messages : 35
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : octobre 2011
Messages : 35
Points : 1
Points : 1
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.
craow87000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 11h45   #4
Invité de passage
 
Femme
Inscription : octobre 2011
Messages : 35
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : octobre 2011
Messages : 35
Points : 1
Points : 1
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?
craow87000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 12h14   #5
Membre habitué
 
Homme
Consultant informatique
Inscription : mars 2002
Messages : 211
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mars 2002
Messages : 211
Points : 133
Points : 133
Hello,

si je comprends bien tes dernières remarques, essaye ceci:
Code :
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...
L0007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 12h38   #6
Invité de passage
 
Femme
Inscription : octobre 2011
Messages : 35
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : octobre 2011
Messages : 35
Points : 1
Points : 1
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
craow87000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 12h55   #7
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 011
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

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

Informations forums :
Inscription : février 2011
Messages : 1 011
Points : 1 712
Points : 1 712
Code :
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;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 13h32   #8
Invité de passage
 
Femme
Inscription : octobre 2011
Messages : 35
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : octobre 2011
Messages : 35
Points : 1
Points : 1
Ca y est mais il a fallu ruser,

j'ai repris les commandes. Voici les 2 fichiers de départs :
Code :
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 :
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
craow87000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 14h38   #9
Invité de passage
 
Femme
Inscription : octobre 2011
Messages : 35
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : octobre 2011
Messages : 35
Points : 1
Points : 1
ben manque de chance, avec mes vrais tables ca ne fonctionne pas.

j'ai ça :
Code :
 MERGE statement has more than one DATA SET WITH repeats of BY VALUES.
craow87000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 14h45   #10
Membre habitué
 
Homme
Consultant informatique
Inscription : mars 2002
Messages : 211
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mars 2002
Messages : 211
Points : 133
Points : 133
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?
L0007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 15h12   #11
Rédacteur
 
Homme Stéphane
Consultant et formateur SAS et Cognos
Inscription : avril 2009
Messages : 1 791
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Localisation : France, Yvelines (Île de France)

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

Informations forums :
Inscription : avril 2009
Messages : 1 791
Points : 4 012
Points : 4 012
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é !

Moteur de recherche dans les papiers SAS
datametric est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 15h14   #12
Invité de passage
 
Femme
Inscription : octobre 2011
Messages : 35
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : octobre 2011
Messages : 35
Points : 1
Points : 1
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=

"
craow87000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 15h18   #13
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 011
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

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

Informations forums :
Inscription : février 2011
Messages : 1 011
Points : 1 712
Points : 1 712
peux-tu poster ton code et ton message d'erreur. ?!!!
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 15h41   #14
Invité de passage
 
Femme
Inscription : octobre 2011
Messages : 35
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : octobre 2011
Messages : 35
Points : 1
Points : 1
En fait je pense que j'ai réussi à faire fonctionné ma commande.

merci pour les astuces!
craow87000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h08.


 
 
 
 
Partenaires

Hébergement Web