Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > Débutez
Débutez Forum concentrant les premières questions que l'on se pose en tant que débutant
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 31/01/2012, 17h04   #1
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 48
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mars 2011
Messages : 48
Points : 0
Points : 0
Par défaut Variable sortie vaut 1 si l'une des variables d'entrée vaut 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...
Kirata est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 31/01/2012, 17h12   #2
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 152
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 152
Points : 1 775
Points : 1 775
As tu cherche? Quelle approche proposes tu? Si tu es bloque, quel est techniquement ton probleme?
Manoutz est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 17h23   #3
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 48
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mars 2011
Messages : 48
Points : 0
Points : 0
Code :
IF b=1 OR c=1 OR d=1 OR e=1 OR ... then relap=1;
bah voila mais la liste des variables est longue
Kirata est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 20h10   #4
Membre Expert
 
Inscription : mars 2005
Messages : 1 012
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 012
Points : 1 260
Points : 1 260
Envoyer un message via Yahoo à bahraoui
tu peux utiliser un array (tableau)SAS.
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
bahraoui est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 23h15   #5
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
Hello,
Je ne vois pas comment le faire avec un array.

je propose l' exemple suivant:

Code :
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;
Pour le nom de tes variables, il faut voir...
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 07h27   #6
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 470
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 470
Points : 2 832
Points : 2 832
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 :
DO i=1 TO DIM(tableau) WHILE(relap=0) ;
olivier.decourt est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 09h55   #7
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
Merci pour la remarque Olivier.
je rectifie le tir .Alors mon exemple devient:
Code :
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;
PS: une solution avec tableaux sera mieux adaptée
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 10h09   #8
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 470
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 470
Points : 2 832
Points : 2 832
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).
Code :
relap=(find('|'!!catx('|',of a--e)!!'|','|1|')>1);
ou bien
Code :
relap=(findW(catx('|',of a--e),'1','|')>0);
olivier.decourt est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/02/2012, 10h11   #9
Membre Expert
 
Inscription : mars 2005
Messages : 1 012
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 012
Points : 1 260
Points : 1 260
Envoyer un message via Yahoo à bahraoui
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
 
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;
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
bahraoui est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/02/2012, 10h13   #10
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 olivier.decourt Voir le message
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).
Code :
relap=(find('|'!!catx('|',of a--e)!!'|','|1|')>1);
ou bien
Code :
relap=(findW(catx('|',of a--e),'1','|')>0);
.
Cette fois , c'est une erreur de copier collé.
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/02/2012, 10h40   #11
Membre Expert
 
Inscription : mars 2005
Messages : 1 012
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 012
Points : 1 260
Points : 1 260
Envoyer un message via Yahoo à bahraoui
c'est plus court avec le find
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
bahraoui est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 10h54   #12
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 bahraoui Voir le message
c'est plus court avec le find
C'est plus court mais je vote quand même pour ta solution
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 11h00   #13
Membre Expert
 
Inscription : mars 2005
Messages : 1 012
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 012
Points : 1 260
Points : 1 260
Envoyer un message via Yahoo à bahraoui

Pourquoi la mienne, l'autre est plus élégante?
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
bahraoui est actuellement 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 11h24.


 
 
 
 
Partenaires

Hébergement Web