Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS Base
SAS Base Forum d'entraide sur SAS base : étape data, procédures non statistiques, procédures non graphiques, SQL
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 20/12/2011, 12h29   #1
Invité régulier
 
Inscription : janvier 2011
Messages : 46
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 46
Points : 7
Points : 7
Par défaut Créer des colonnes

Bonjour,

j'ai un fichier qui comprend plusieurs colonnes dont :
PRES et NBE

Je souhaite créer une troisième colonne disant que si (PRES = '0') et (NBE = 0) alors il faut mettre iso. Sinon, il faut mettre noniso.

J'ai essayé avec les fonctions conditionnelles (CASE, WHEN,...) sans succès. Pouvez-vous m'éclairer?

Je vous remercie par avance pour votre réponse.

Cordialement,
Au pays des stats est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 20/12/2011, 13h07   #2
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 150
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 150
Points : 1 772
Points : 1 772
Quel est ton probleme? Je ne vois pas pourquoi ca ne marcherais pas avec des if, tout simplement..
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 14h03   #3
Membre éclairé
 
Homme
statisticien
Inscription : mai 2011
Messages : 213
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : statisticien
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : mai 2011
Messages : 213
Points : 319
Points : 319
Citation:
Envoyé par Au pays des stats Voir le message
Bonjour,

j'ai un fichier qui comprend plusieurs colonnes dont :
PRES et NBE

Je souhaite créer une troisième colonne disant que si (PRES = '0') et (NBE = 0) alors il faut mettre iso. Sinon, il faut mettre noniso.

J'ai essayé avec les fonctions conditionnelles (CASE, WHEN,...) sans succès. Pouvez-vous m'éclairer?

Je vous remercie par avance pour votre réponse.

Cordialement,

Créer une colonne , c'est créer une variable

if (pres='0' and nbe='0') then var_iso='Iso ';else var_iso='NonIso';
jerome_pdv2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 16h09   #4
Invité régulier
 
Inscription : janvier 2011
Messages : 46
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 46
Points : 7
Points : 7
Bonjour,

j'ai essayé mais j'ai des messages d'erreur. Voici le dernier en date :


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
25
26
27
28
29
30
31
32
33
1                                                                                                                        The SAS System                                                                                         11:04 Tuesday, December 20, 2011
 
1          ;*';*";*/;quit;run;
2          OPTIONS PAGENO=MIN;
 
 
3          PROC SQL;
3        !           VALIDATE
4          SELECT (if (pres='0' and nbe='0') then var_iso='Iso ';
                                                   ____
                                                   22
                                                   76
ERROR 22-322: Syntax error, expecting one of the following: !, !!, &, ), *, **, +, -, /, <, <=, <>, =, >, >=, ?, AND, BETWEEN, CONTAINS, EQ, EQT, GE, GET, GT, GTT, IN, IS, LE, LET, LIKE, LT, LTT, NE, NET, NOT, NOTIN, OR, ^, ^=, |, ||, ~, ~=.  
 
ERROR 76-322: Syntax error, statement will be ignored.
 
NOTE: PROC SQL set option NOEXEC and will continue to check the syntax of statements.
4                                                                      else var_iso='NonIso') AS 'Isolé'n
                                                                       ____
                                                                       180
ERROR 180-322: Statement is not valid or it is used out of proper order.
 
5          
6           FROM EGTASK.QUERY_FOR_QUERY_FOR_BASEF_0002 AS QUERY_FOR_QUERY_FOR_BASEF_00;
7          QUIT;
NOTE: The SAS System stopped processing this step because of errors.
NOTE: PROCEDURE SQL used (Total process time):
      real time           0.00 seconds
      cpu time            0.00 seconds
 
8          
9          QUIT; RUN;
10
Que puis-je faire?

Merci pour votre aide.

Cordialement,
Au pays des stats est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 20/12/2011, 16h50   #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 828
Points : 2 828
Comme tu es en requête SQL, la formule devrait être un CASE.
Genre
Code :
1
2
3
4
CASE
  WHEN (pres='0' AND nbe='0') THEN "Iso   "
  ELSE "NonIso"
END
Les espaces dans la valeur ISO sont là pour forcer SAS à bien dimensionner la colonne sur 6 caractères. Evidemment, c'est plus propre de le forcer dans les propriétés de la colonne créée.
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 20/12/2011, 17h32   #6
Invité régulier
 
Inscription : janvier 2011
Messages : 46
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 46
Points : 7
Points : 7
Bonjour,

j'ai encore un message d'erreur. J'ai du mal à écrire les expressions... Où puis-je trouver des informations afin d'être plus autonome?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1          ;*';*";*/;quit;run;
2          OPTIONS PAGENO=MIN;
3          PROC SQL;
3        !           VALIDATE
4          SELECT (CASE
5          WHEN (pres='0' AND NBE='0') THEN "Iso   "
6          ELSE "NonIso"
7          END ) AS Isolement
8          
9           FROM EGTASK.QUERY_FOR_QUERY_FOR_BASEF_0002 AS QUERY_FOR_QUERY_FOR_BASEF_00;
ERROR: Expression using equals (=) has components that are of different data types.
NOTE: PROC SQL set option NOEXEC and will continue to check the syntax of statements.
10         QUIT;
NOTE: The SAS System stopped processing this step because of errors.
NOTE: PROCEDURE SQL used (Total process time):
      real time           0.00 seconds
      cpu time            0.00 seconds
 
11         
12         QUIT; RUN;
13
Merci pour votre réponse sur ce message d'erreur.

Cordialement,
Au pays des stats est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 20/12/2011, 17h49   #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
tu peux poster ton code ?
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 20/12/2011, 17h53   #8
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 828
Points : 2 828
Excuse-moi, j'ai fait un copier/coller, mais pas de la bonne version de la condition. Dans ton premier message tu écrivais bien
Code :
(PRES = '0') et (NBE = 0)
sans guillemets pour NBE qui est numérique. La formule conditionnelle est donc
Code :
1
2
3
4
CASE
  WHEN (pres='0' AND nbe=0) THEN "Iso   "
  ELSE "NonIso"
END
Le message
Citation:
Expression using equals (=) has components that are of different data types
indique que dans une condition d'égalité, il y a comparaison d'un texte et d'un nombre. Ce qui dans ton cas ne peut se produire que si PRES ou NBE est numérique, puisqu'avec mon code faux, on proposait des valeurs textes (entre guillemets).
En espérant que cette fois tout ira bien.
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/12/2011, 22h26   #9
Invité régulier
 
Inscription : janvier 2011
Messages : 46
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 46
Points : 7
Points : 7
Merci beaucoup pour le code. Cela a bien fonctionné.

Merci plus généralement pour votre aide qui m'est très précieuse!

Cordialement,
Au pays des stats 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 20h30.


 
 
 
 
Partenaires

Hébergement Web