Bonjour
tu le fais "presque" comme sur tout autre langage de programmation
si pa>=140 avec nbmed (4 dont med_diu) alors var5=1
var5=(pa>=140)*(nbmed='4')*(med_diu=1);
si pa>=130 et (creat>=160 ou diabète) et nbmed >=3 (dont med_diu) alors var5=1
var5=(pa>=130)*((creat>=160) or (diabete=1))*(nbmed>='3')*(med_diu=1);
et si tu veux
si pa>=140 avec nbmed (4 dont med_diu) alors var5=1
OU
si pa>=130 et (creat>=160 ou diabète) et nbmed >=3 (dont med_diu) alors var5=1
alors
1 2 3
|
var5=((pa>=140)*(nbmed='4')*(med_diu=1)) OR
((pa>=130)*((creat>=160) or (diabete=1))*(nbmed>='3')*(med_diu=1)); |
Le cas échéant tu remplace creat,diabete etc... par tes vrai variables dans la formule (var1,var2, etc...).
Concernant if, then else si tu veux les utiliser c'est
IF (test1) THEN (action1) ;ELSE (action2);
Pour les test imbriqués (plus de deux actions) c'est avec DO;END; si tes actions sont simples tu peux ne pas en avoir besoin
IF (test1) THEN IF (test2) THEN IF (test3) THEN (action);
exemple
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
data a;
a=1;
b=1;
c=1;output;
a=2;
b=1;
c=0;output;
a=0;
b=1;
c=2;output;
run;
data a;set a;
if a>=1 then if b=1 then if c<=1 then test=1;
run;
proc print data=a; |
Pour le codage des variables, il est souvent plus simple de le faire comme je te le propose, sauf sur de très grosses bases de données et si les tests sont complexes alors pour des raisons de performance il faudra choisir une construction à base de IF THEN ELSE (en n'oubliant pas les blocs DO;END; lorsque nécessaire).
Partager