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;
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;
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;
c'est plus court avec le find
Pourquoi la mienne, l'autre est plus élégante?
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager