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 30/05/2011, 10h29   #1
Membre à l'essai
 
Inscription : novembre 2009
Messages : 107
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 107
Points : 20
Points : 20
Par défaut Problème sur condition IF

* Bonjour, *

Voila Mon code

Code :
1
2
3
4
5
6
7
8
DATA Seroconversion ;
SET mylib.SOUCHE( keep=D0 D21 SUB_ID);
seroconversion=0;
IF((D0>=10 AND D21/D0>=4) OR (D0<10 AND D21>=40))
then Seroconversion=1;
IF D0=. OR D21=. then Seroconversion=" ";
DROP D0 D21;
run;
Voila l erreur

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
692  DATA SeroprotectionD21;
693  SET mylib.SOUCHE ( keep=D0 D21 SUB_ID);
694  IF D21=. then SeroprotectionD0=.;
695  IF D21 <40 OR THEN SeroprotectionD21=0;
                        -----------------
                        22
696  else SeroprotectionD21=1;
     ----
     160
ERROR 22-322: Syntax error, expecting one of the following: !, !!, &, (, *, **, +, -, /, ;, <,
              <=, <>, =, >, ><, >=, AND, EQ, GE, GT, IN, LE, LT, MAX, MIN, NE, NG, NL, NOTIN,
              OR, [, ^=, {, |, ||, ~=.
 
ERROR 160-185: No matching IF-THEN clause.
 
697  DROP D0 D21 ;
698  Run;
ce que je voulais faire est :si ((D0>=10 AND D21/D0>=4) ou (D0<10 AND D21>=40) la variable prend pour valeur 1

Si D21=. ou D0=. je veux que la variable soit vide

et dans tous les autre cas que la variable prenne comme valeur 0.

* Merci *
asty69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2011, 11h07   #2
Membre habitué
 
Homme
Consultant informatique
Inscription : mars 2002
Messages : 211
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mars 2002
Messages : 211
Points : 133
Points : 133
Pour faire simple:

Code :
1
2
3
4
5
var=0;
 
IF ((D0>=10 AND D21/D0>=4) OR (D0<10 AND D21>=40) then var=1;
 
else IF D21=. OR D0=. then var=.;
L0007 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/05/2011, 11h09   #3
Rédacteur
 
Homme Stéphane
Consultant et formateur SAS et Cognos
Inscription : avril 2009
Messages : 1 791
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Consultant et formateur SAS et Cognos
Secteur : Conseil

Informations forums :
Inscription : avril 2009
Messages : 1 791
Points : 4 012
Points : 4 012
Tu as vu dans ta ligne 6 que tu lui demandes de passer un esapce alors que la variable est numérique ?

La LOG et le programme ne semble pas correspondre et dans la LOG tu n'as pas fini ton OR.

Donc ton code devrait être comme cela ?

Citation:
seroconversion=0
If (D0>=10 AND D21/D0>=4) OR (D0<10 AND D21>=40) then seroconversion=1;
else if D21=. OR D0=. then then seroconversion=.;
__________________
N'oubliez pas de cliquer sur lorsque votre problème est réglé !

Moteur de recherche dans les papiers SAS
datametric est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 30/05/2011, 13h09   #4
Membre à l'essai
 
Inscription : novembre 2009
Messages : 107
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 107
Points : 20
Points : 20
Par défaut petite erreut de copier collé

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
DATA AD21
SET mylib.SOUCHE ( keep=D0 D21 SUB_ID);
IF D21 <40  THEN AD21=0;
else AD21=1;
IF D21=. then AD0=.;
DROP D0 D21 ;
Run;
 
 
DATA AD0;
SET mylib.SOUCHE ( keep=D0 D21 SUB_ID);
IF D0 <40  THEN AD0=0;
else AD0=1;
IF D0=. then AD0=.;
DROP D0 D21 ;
Run;
sur ce code j ai aucune erreur signaler par la log
mais pour AD21 Les "." sont remplacé par des 0 alors que j voudrais des" ."

et ce que comprend pas c est que je ne st pas ce probleme avec AD0 alors que le code est le meme
asty69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2011, 13h32   #5
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
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 467
Points : 2 823
Points : 2 823
C'est probablement encore une erreur de copier/coller, puisque dans la 1e étape DATA on trouve
Si j'ai bien compris, c'est AD21 et non pas AD0 que tu voudrais modifier à ce stade.
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/05/2011, 13h37   #6
Membre habitué
 
Homme
Consultant informatique
Inscription : mars 2002
Messages : 211
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mars 2002
Messages : 211
Points : 133
Points : 133
D'accord avec Olivier
L0007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2011, 13h38   #7
Membre à l'essai
 
Inscription : novembre 2009
Messages : 107
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 107
Points : 20
Points : 20
Par défaut merci

non c était l erreur que je cherchais de partout sans comprendre pourquoi ca ne marche pas
asty69 est dé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 17h13.


 
 
 
 
Partenaires

Hébergement Web