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 22/11/2011, 11h23   #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 Création de variables : condition IF et valeurs manquantes

bonjour,

j'ai un problème dans ma commande. J'ai un tableau avec une variable caractères (ATC1) et je veux, à partir des valeurs de cette variable recréer de nouvelles variables que j'appelle crit (0 ou 1). la variable atc1 a aussi des valeurs manquantes et c'est là qu'est le problème, j'aimerai que quand atc1 est " " alors toutes les variables crit soit ".". Ca ne marche pas il me me met "0"

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
50
DATA medinap.t;
SET medinap.r;
IF atc1=" " then do;
crit1=.;
crit2=.;
crit4=.;
crit5=.;
crit6=.;
crit7=.;
crit8=.;
crit10=.; 
crit11=.; 
crit13=.; 
crit15=.;
crit16=.;
crit17=.;
crit18=.;
crit19=.;
crit20=.;
crit26=.;
crit28=.;
crit29=.;
crit30=.;
crit31=.;
crit32=.;
end;
IF ATC1='M01AB01' then crit1=1; else crit1=0;
IF ATC1='M01AA01' then crit2=1; else crit2=0;
IF ATC1 IN ('N06AA02', 'N06AA04', 'N06AA06', 'N06AA09', 'N06AA12', 'N06AA16', 'N06AA17', 'N06AA21') then crit4=1; else crit4=0;
IF ATC1 IN ('N05AA01', 'N05AA02', 'N05AA06', 'N05AB02', 'N05AC01', 'N05AB03', 'N05AC04') then crit5=1; else crit5=0;
IF ATC1 IN ('N05CX01', 'R06AA09', 'R06AD01') then crit6=1; else crit6=0;
IF atc1 IN ('N05BB01', 'R05DB20', 'R06AB01', 'R06AB02', 'R06AB52', 'R06AD01', 'R06AD07', 'R06AX02', 'R06AA08') then crit7=1; else crit7=0;
IF ATC1 IN ('G04BD04', 'G04BD07', 'G04BD08') then crit8=1; else crit8=0;
IF ATC1 IN ('N05BA01', 'N05BA02', 'N05BA05', 'N05BA08', 'N05BA09', 'N05BA11', 'N05BA16', 'N05BA18', 'N05CD02', 'N05CD03', 'N05CO04', 'N05CX01') then crit10=1; else crit10=0;
IF atc1 IN ('C02AB02', 'C02AC01', 'C02AC02', 'C02AC05', 'C02AC06') then crit11=1; else crit11=0;
IF ATC1='C02LA01' then crit13=1; else crit13=0;
IF ATC1='C01BA03' then crit15=1; else crit15=0;
IF atc1='B01AC05' then crit16=1; else crit16=0;
IF atc1='A02BA01' then crit17=1; else crit17=0;
IF ATC1 IN ('A06AB01' , 'A06AB02', 'A06AA02', 'A06AB03', 'A06AB04', 'A06AB05', 'A06AB06', 'A06AB07', 'A06AB08', 'A06AB09', 'A06AB20', 'A06AB30', 'A06AB52', 'A06AB53', 'A06AB56', 'A06AB57', 'A06AB58') then crit18=1; else crit18=0;
IF ATC1 IN ('A10BB06', 'A10BB07') then crit19=1; else crit19=0;
IF atc1 IN ('M03BA03', 'M03BX01', 'M03BX07') then crit20=1; else crit20=0;
IF atc1 IN ('C04AD03', 'C04AE01', 'C04AE02', 'C04AE51', 'C04AE54', 'C04AX07', 'C04AX10', 'C04AX17', 'C04AX21', 'N04BC08', 'N06BX03', 'N06DX02', 'C05CA04', 'C05CA54', 'C04AE54') then crit26=1; else crit26=0;
IF atc1='A06AC53' then crit28=1; else crit28=0;
IF atc1 IN ('A03AA08', 'A03AB17', 'A03CA02', 'A04AD01', 'A07DA01') then crit29=1; else crit29=0;
IF atc1 IN ('R06AX07', 'R05DB20', 'R06AB04', 'R06AA02', 'A04AD05', 'A03FA05', 'R06AA52', 'R06AD08', 'R06AE01', 'R06AE05', 'R06AX23', 'R06AA02') then crit30=1; else crit30=0;
IF atc1 ='B01AC07' then crit31=1; else crit31=0;
IF atc1='J01XE01' then crit32=1; else crit32=0;
 
run;
craow87000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 11h55   #2
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 012
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 012
Points : 1 717
Points : 1 717
bah c'est toi qui lui a demandé de mettre des 0 (Zéro) dans les ELSE
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 11h59   #3
Membre Expert
 
Inscription : mars 2005
Messages : 1 011
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 011
Points : 1 259
Points : 1 259
Envoyer un message via Yahoo à bahraoui
c'est bizarre!!
Avec le code ci-dessous le test marche bien si la variable est vide.
Code :
1
2
3
4
5
6
7
8
9
10
 
DATA t;
a="";
put a=;
b=put(a,$hex16.);
put b;
len=length(a);
IF a = " " then t=1;else t=0;
IF a = "" then t1=1;else t1=0;
run;
Est ce que tu peux créer une nouvelle variable b=put(atc1,$hex16.)?
Et vérifier si le contenu est différent de 20
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 12h00   #4
Membre Expert
 
Inscription : mars 2005
Messages : 1 011
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 011
Points : 1 259
Points : 1 259
Envoyer un message via Yahoo à bahraoui
S_a_m à raison
La structure du test n'est bon
If ... then
Else if ... then
Else ....
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 13h55   #5
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
je sais bien que je "lui ai dit de mettre 0" justement je ne voyait pas comment faire.
craow87000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 14h07   #6
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 012
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 012
Points : 1 717
Points : 1 717
Citation:
Envoyé par craow87000 Voir le message
je sais bien que je "lui ai dit de mettre 0" justement je ne voyait pas comment faire.
un truc du genre :
Code :
IF ATC1 IN ('N06AA02', 'N06AA04', 'N06AA06', 'N06AA09', 'N06AA12', 'N06AA16', 'N06AA17', 'N06AA21')and crit4 ne . then crit4=1; else crit4=0;
je te conseil la proc FORMAT
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 14h35   #7
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
le résultat n'est pas différent de 2à mais je vous avoue que je ne comprends pas ce qu'il faut que je fasse de cette commande.












Citation:
Envoyé par bahraoui Voir le message
c'est bizarre!!
Avec le code ci-dessous le test marche bien si la variable est vide.
Code :
1
2
3
4
5
6
7
8
9
10
 
DATA t;
a="";
put a=;
b=put(a,$hex16.);
put b;
len=length(a);
IF a = " " then t=1;else t=0;
IF a = "" then t1=1;else t1=0;
run;
Est ce que tu peux créer une nouvelle variable b=put(atc1,$hex16.)?
Et vérifier si le contenu est différent de 20
craow87000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 14h53   #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
Non justement car c'est le crit4 que je veux créer

Si ATC1 contient une de ces valeurs ('N06AA02', 'N06AA04', 'N06AA06', 'N06AA09', 'N06AA12', 'N06AA16', 'N06AA17', 'N06AA21') alors crit4=1, sinon crit4=0 sauf si ATC1=. alors crit4=.
c'est en français ce que je veux faire

j'ai essayé

Code :
IF ATC1='M01AB01' then crit1=1; else  IF ATC1 ne " " then crit1=0;
mais ca ne changer rien non plus!


Citation:
Envoyé par s_a_m Voir le message
un truc du genre :
Code :
IF ATC1 IN ('N06AA02', 'N06AA04', 'N06AA06', 'N06AA09', 'N06AA12', 'N06AA16', 'N06AA17', 'N06AA21')and crit4 ne . then crit4=1; else crit4=0;
je te conseil la proc FORMAT
craow87000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 15h09   #9
Membre Expert
 
Inscription : mars 2005
Messages : 1 011
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 011
Points : 1 259
Points : 1 259
Envoyer un message via Yahoo à bahraoui
Code :
1
2
3
4
5
6
7
8
9
DATA medinap.t;
SET medinap.r;
 
IF ATC1='M01AB01' then crit1=1; 
else IF act1=" " then crit1=.;
else crit1=0;
 
 
run;
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 15h14   #10
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
du coup j'ai essayé ca :

Code :
IF ATC1='M01AB01' then crit1=1; else  IF ATC1=" " then crit1=.; else crit1=0;
et ca a l'air de fonctionner!
craow87000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 15h23   #11
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 012
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 012
Points : 1 717
Points : 1 717
Citation:
Envoyé par craow87000 Voir le message
du coup j'ai essayé ca :

Code :
IF ATC1='M01AB01' then crit1=1; else  IF ATC1=" " then crit1=.; else crit1=0;
et ca a l'air de fonctionner!
et bah très bien ;
si t'essaies sa :
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
50
51
52
 
DATA medinap.t;
SET medinap.r;
 
IF ATC1='M01AB01' then crit1=1; else crit1=0;
IF ATC1='M01AA01' then crit2=1; else crit2=0;
IF ATC1 IN ('N06AA02', 'N06AA04', 'N06AA06', 'N06AA09', 'N06AA12', 'N06AA16', 'N06AA17', 'N06AA21') then crit4=1; else crit4=0;
IF ATC1 IN ('N05AA01', 'N05AA02', 'N05AA06', 'N05AB02', 'N05AC01', 'N05AB03', 'N05AC04') then crit5=1; else crit5=0;
IF ATC1 IN ('N05CX01', 'R06AA09', 'R06AD01') then crit6=1; else crit6=0;
IF atc1 IN ('N05BB01', 'R05DB20', 'R06AB01', 'R06AB02', 'R06AB52', 'R06AD01', 'R06AD07', 'R06AX02', 'R06AA08') then crit7=1; else crit7=0;
IF ATC1 IN ('G04BD04', 'G04BD07', 'G04BD08') then crit8=1; else crit8=0;
IF ATC1 IN ('N05BA01', 'N05BA02', 'N05BA05', 'N05BA08', 'N05BA09', 'N05BA11', 'N05BA16', 'N05BA18', 'N05CD02', 'N05CD03', 'N05CO04', 'N05CX01') then crit10=1; else crit10=0;
IF atc1 IN ('C02AB02', 'C02AC01', 'C02AC02', 'C02AC05', 'C02AC06') then crit11=1; else crit11=0;
IF ATC1='C02LA01' then crit13=1; else crit13=0;
IF ATC1='C01BA03' then crit15=1; else crit15=0;
IF atc1='B01AC05' then crit16=1; else crit16=0;
IF atc1='A02BA01' then crit17=1; else crit17=0;
IF ATC1 IN ('A06AB01' , 'A06AB02', 'A06AA02', 'A06AB03', 'A06AB04', 'A06AB05', 'A06AB06', 'A06AB07', 'A06AB08', 'A06AB09', 'A06AB20', 'A06AB30', 'A06AB52', 'A06AB53', 'A06AB56', 'A06AB57', 'A06AB58') then crit18=1; else crit18=0;
IF ATC1 IN ('A10BB06', 'A10BB07') then crit19=1; else crit19=0;
IF atc1 IN ('M03BA03', 'M03BX01', 'M03BX07') then crit20=1; else crit20=0;
IF atc1 IN ('C04AD03', 'C04AE01', 'C04AE02', 'C04AE51', 'C04AE54', 'C04AX07', 'C04AX10', 'C04AX17', 'C04AX21', 'N04BC08', 'N06BX03', 'N06DX02', 'C05CA04', 'C05CA54', 'C04AE54') then crit26=1; else crit26=0;
IF atc1='A06AC53' then crit28=1; else crit28=0;
IF atc1 IN ('A03AA08', 'A03AB17', 'A03CA02', 'A04AD01', 'A07DA01') then crit29=1; else crit29=0;
IF atc1 IN ('R06AX07', 'R05DB20', 'R06AB04', 'R06AA02', 'A04AD05', 'A03FA05', 'R06AA52', 'R06AD08', 'R06AE01', 'R06AE05', 'R06AX23', 'R06AA02') then crit30=1; else crit30=0;
IF atc1 ='B01AC07' then crit31=1; else crit31=0;
IF atc1='J01XE01' then crit32=1; else crit32=0;
 
IF atc1=" " then do;
crit1=.;
crit2=.;
crit4=.;
crit5=.;
crit6=.;
crit7=.;
crit8=.;
crit10=.; 
crit11=.; 
crit13=.; 
crit15=.;
crit16=.;
crit17=.;
crit18=.;
crit19=.;
crit20=.;
crit26=.;
crit28=.;
crit29=.;
crit30=.;
crit31=.;
crit32=.;
end;
run;
t'as quoi comme résultat ?
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h11.


 
 
 
 
Partenaires

Hébergement Web