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 10/08/2011, 16h30   #1
Invité régulier
 
Homme REMI
Étudiant
Inscription : juin 2011
Messages : 34
Détails du profil
Informations personnelles :
Nom : Homme REMI
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 34
Points : 7
Points : 7
Par défaut Optimisation Nouvelle Variable : conditions sur variables

ReBonjour à tout le monde!

Je me permets ici de vous présenter un défi somme toute simple pour vous, je le pense; il serait utile de fluidifier le code dans la création d'une variable:

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
 
DATA stock;
SET stock;
IF CANAL_APPORT_SOURCE='AUBQ' then CAT='BUP';
run;
 
DATA stock;
SET stock;
IF CANAL_APPORT_SOURCE='CA' then CAT='BUP';
run;
 
DATA stock;
SET stock;
IF CANAL_APPORT_SOURCE='LCL' then CAT='BUP';
run;
 
DATA stock;
SET stock;
IF CANAL_APPORT_SOURCE='APPO' then CAT='BUP';
run;
 
DATA stock;
SET stock;
IF CANAL_APPORT_SOURCE='DIRE' then CAT='NON BUP';
run;
 
DATA stock;
SET stock;
IF CANAL_APPORT_SOURCE='CCF' then CAT='NON BUP';
run;
Il y a donc six catégories à regrouper sous le nom d'une nouvelle variable avec deux variantes: BUP/NON BUP

Je vous en remercie!

REMI
mantus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 16h42   #2
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
la fonction "in" convient bien a cet effet:

Code :
1
2
3
4
5
6
7
8
DATA stock;
SET stock;
IF CANAL_APPORT_SOURCE IN ("'AUBQ", "CA", "LCL")
   then CAT='BUP';
IF CANAL_APPORT_SOURCE IN ("'APPO", "DIRE", "CCF")
   then CAT='NON BUP';
 
run;
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/08/2011, 16h55   #3
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
Un format, un format !!!
Code :
1
2
3
4
5
6
PROC FORMAT ;
  VALUE $categories
   "AUBQ", "CA", "LCL" = "BUP"
   OTHER = "NON BUP"
  ;
RUN ;
Ensuite, au choix : soit l'affichage en 2 catégories te suffit le temps d'une proc par exemple et il suffit d'ajouter à la procédure
Code :
FORMAT CANAL_APPORT_SOURCE $categories. ;
soit tu veux une vraie variable séparée et tu fais
Code :
1
2
3
4
DATA stock;
SET stock;
CAT=PUT(CANAL_APPORT_SOURCE, $categories.) ;
run;
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/08/2011, 18h19   #4
Invité régulier
 
Homme REMI
Étudiant
Inscription : juin 2011
Messages : 34
Détails du profil
Informations personnelles :
Nom : Homme REMI
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 34
Points : 7
Points : 7
Par défaut Re problème

Merci à vous pour les précieuses réponses!

Mais il m'affiche maintenant

Code :
1
2
 
Vous ne pouvez pas ouvrir WORK.STOCK.DATA pour accès Sortie avec contrôlede niveau entrée car WORK.STOCK.DATA est utilisé(e) par vous dans environnement ressourcesDATASTEP.
Je ne comprends pas, mon code fonctionnait avant et plus maintenant...Les vôtre de mêmes.

mille mercis!

REMI
mantus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 18h30   #5
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
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 006
Points : 1 703
Points : 1 703
Hello,
il y a aussi les CASE , mais la proc format est très utile surtout quand il s'agit de réutiliser tes formats créés dans d'autres étapes de ton programme (ou dans d'autres programmes).

sollution en SQL CASE ;
Code :
1
2
3
4
5
6
7
8
 
proc sql;
CREATE TABLE stock AS 
SELECT * ,case    
	when   CANAL_APPORT_SOURCE IN ("AUBQ", "CA", "LCL") then "BUP"
	else "NON BUP"			
end AS CAT FROM stock ;
quit;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/08/2011, 09h08   #6
Invité régulier
 
Homme REMI
Étudiant
Inscription : juin 2011
Messages : 34
Détails du profil
Informations personnelles :
Nom : Homme REMI
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 34
Points : 7
Points : 7
Par défaut Merci!

Je vous en remercie, comme d'habitude de multiples solutions existent et je n'en trouve aucun!

mille mercis!

REMI
mantus 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 08h58.


 
 
 
 
Partenaires

Hébergement Web