salut,
mes données sont comme ça
a b c d e
8 0 0 0 0
5 0 1 1 0
je souhaite créer une var S qui prend 1 si l'une des var (b,c,d ou e ) prend 1...
salut,
mes données sont comme ça
a b c d e
8 0 0 0 0
5 0 1 1 0
je souhaite créer une var S qui prend 1 si l'une des var (b,c,d ou e ) prend 1...
As tu cherche? Quelle approche proposes tu? Si tu es bloque, quel est techniquement ton probleme?
bah voila mais la liste des variables est longue
Code : Sélectionner tout - Visualiser dans une fenêtre à part if b=1 or c=1 or d=1 or e=1 or ... then relap=1;
tu peux utiliser un array (tableau)SAS.
Hello,
Je ne vois pas comment le faire avec un array.
je propose l' exemple suivant:
Pour le nom de tes variables, il faut voir...
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 data tab; input a b c d e; cards; 8 0 0 0 0 5 0 1 1 0 0 1 0 0 0 1 0 2 3 4 3 2 2 9 6 0 1 3 5 6 4 5 6 7 1 0 2 3 4 5 ;run; data tab; set tab; s=ifn (findc(cats(of a--e),1)>=1,1,0) ; 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
Hello SAM.
Si une des variables vaut 12, est-ce que ta solution ne la considère pas comme valant 1 ?
Avec un ARRAY comme le suggérait Salah, l'algorithme serait :
1) RELAP initialisé à 0
2) parcourir l'array en boucle
3) si un élément de l'array vaut 1, alors RELAP=1
On peut même abréger les souffrances de la boucle en lui ajoutant une condition d'arrêt si RELAP passe à 1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part DO i=1 TO DIM(tableau) WHILE(relap=0) ;
Merci pour la remarque Olivier.
je rectifie le tir .Alors mon exemple devient:
PS: une solution avec tableaux sera mieux adaptée
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 DATA tab; input a b c d e; cards; 8 0 0 0 0 18 0 0 0 0 8 0 0 0 11 5 0 1 1 0 0 1 0 0 0 1 0 2 3 4 3 2 2 9 6 0 1 3 5 6 4 5 6 7 1 0 2 3 4 5 ;run; DATA tab; SET tab; relap=ifn (find('|'!!catx('|',of a--e),'|1|')>1,1,0); 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
Il manque encore à ta solution de concaténer un dernier | à la fin pour le cas où le seul 1 serait le dernier (c'est le cas dans l'observation 9 de ton exemple).
ou bien
Code : Sélectionner tout - Visualiser dans une fenêtre à part relap=(find('|'!!catx('|',of a--e)!!'|','|1|')>1);
Code : Sélectionner tout - Visualiser dans une fenêtre à part relap=(findW(catx('|',of a--e),'1','|')>0);
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 DATA tab; input a b c d e; cards; 8 0 0 0 0 0 0 0 0 0 5 0 1 1 0 0 0 0 0 0 0 1 0 0 0 1 0 2 3 4 3 2 2 9 6 0 1 3 5 6 4 5 6 7 1 0 2 3 4 5 0 0 0 0 0 ;run; data tab1;set tab; array tableau(*) _numeric_; s=0; DO i=1 TO DIM(tableau); if tableau[i] eq 1 then s=1; end; 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
c'est plus court avec le find
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
Pourquoi la mienne, l'autre est plus élégante?
Partager