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 23/11/2011, 21h14   #1
Membre régulier
 
Femme Mariam
Statisticienne-Consultante BI
Inscription : avril 2008
Messages : 127
Détails du profil
Informations personnelles :
Nom : Femme Mariam
Localisation : Canada

Informations professionnelles :
Activité : Statisticienne-Consultante BI
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 127
Points : 96
Points : 96
Par défaut Creation conditionnelle de variable dans la table resultante

Bonjour,

Dans une etape date je crée des variables dans une boucle en fonction des mois. MN_1_2010....MN_i_2010.
Maintenant je voudrais créer ma variable MN_31_DEC_2010 UNIQUEMENT si mon mois =12.
Je sais comment créer des tables conditionnelles (if...then output nom_table) mais comment fait-on avec des variables?.
J'ai tenté le coup avec if &mois=12 then put MN_31_DEC_2010 =montant;

PS:J'ai appliqué la fonction rechercher pour trouver un sujet similaire mais j'ai pas eu mon bonheur.
MDsas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 10h22   #2
Membre Expert
 
Inscription : mars 2005
Messages : 1 011
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 011
Points : 1 259
Points : 1 259
Envoyer un message via Yahoo à bahraoui

c'est tout simple:

if ... then do;
new_var=val;
output table;
end;

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
 
DATA t;
a=1;output;
a=2;output;
run;
DATA t1 t2; SET t;
IF a=1 then do;
	b=2;
	output t1;
end;
else do;
	b=3;
	output t2;
end;
run;
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 10h24   #3
Membre Expert
 
Inscription : mars 2005
Messages : 1 011
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 011
Points : 1 259
Points : 1 259
Envoyer un message via Yahoo à bahraoui
Tu peux créer autant de variable que tu veux avant l'output.
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 14h59   #4
Membre régulier
 
Femme Mariam
Statisticienne-Consultante BI
Inscription : avril 2008
Messages : 127
Détails du profil
Informations personnelles :
Nom : Femme Mariam
Localisation : Canada

Informations professionnelles :
Activité : Statisticienne-Consultante BI
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 127
Points : 96
Points : 96
Merci cependant la solution que tu me propose crée deux tables en sorties avec une valeur différente de b selon la condition sur a.

Moi je voudrais que b se créée uniquement pour une valeur existante de a. Sinon je ne voudrais pas de b dans ma table de sortie.
Mais j'ai l'impression que le fait même de faire appel à b dans la conidition suffit pour la créée dans le resultat.

Ce que je voudrais serait comme un keep ou un drop conditionnel.
A défaut j'afficherais toujours la variable et elle aura une valeur quand ma condition sera remplie. (il y a plus qu'à vendre cela au client !...si vous n'avez pas de solution évidemment).

Merci.
MDsas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 16h16   #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
Mais comme tu l'indiques Mariam, c'est juste une affaire de KEEP ou de DROP !
Si tu ne veux pas la variable X dans la table T1 mais par contre, dans T2, tu fais
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 16h01   #6
Membre régulier
 
Femme Mariam
Statisticienne-Consultante BI
Inscription : avril 2008
Messages : 127
Détails du profil
Informations personnelles :
Nom : Femme Mariam
Localisation : Canada

Informations professionnelles :
Activité : Statisticienne-Consultante BI
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 127
Points : 96
Points : 96
Bonjour,

J'ai rien contre la creation d'une autre table mais ce que je veux vraiment c'est :
pour la même table en SORTIE la creation ou pas d'une variable en fonction d'une variable existante dans la table en ENTRÉE.
Si on s'inspire du cas plus haut avec a et b.
Code :
1
2
3
4
5
6
7
 
DATA t;
input a mois;
cards;
1 12
2 12
run;
j'ai une table T avec
a mois
1 12
2 12

Voici l'illustration du résultat souhaité: une table t1
de la forme:
SI mois = 12 (cdt remplie) b=2;
T1 vaut
a mois b
1 12 2
2 12 2

SINON (mois ne 12)

T1 vaut
a mois
1 12
2 12

Merci de vos retours.
MDsas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 16h31   #7
Membre régulier
 
Inscription : novembre 2009
Messages : 77
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 77
Points : 74
Points : 74
Par défaut y qu'à demander

Attention: dans ton dataset résultat, tu as ou pas la colonne b, mais pas pour certaines lignes oui et pour d'autres non, cela n'a pas de sens.
Ici dès qu'une des lignes contient 12 on garde la colonne b:

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
34
35
36
/* Exemple ou a vaut 12 pour au moins une ligne */
 
/* Créer l'exemple */
DATA DATA;
a=12;
b=5;
run;
 
/* Suppose pas de a=12=> drop */
%let drop_col = DROP b;
DATA DATA;
SET DATA;
/* Si on détecte au moins une ligne avec a=12 on garde la colonne=>annuler le drop */
IF a eq 12 then call symput('drop_col', '');
run;
/* faire le drop quand il y a lieu */
DATA DATA;
SET DATA;
&drop_col;
run;
 
/* Exemple 2: aucune ligne avec a=12 */
DATA DATA;
a=11;
b=5;
run;
 
%let drop_col = DROP b;
DATA DATA;
SET DATA;
IF a eq 12 then call symput('drop_col', '');
run;
DATA DATA;
SET DATA;
&drop_col;
run;
frfancha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 17h02   #8
Membre régulier
 
Femme Mariam
Statisticienne-Consultante BI
Inscription : avril 2008
Messages : 127
Détails du profil
Informations personnelles :
Nom : Femme Mariam
Localisation : Canada

Informations professionnelles :
Activité : Statisticienne-Consultante BI
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 127
Points : 96
Points : 96
Ton exemple par du fait que b existe déjà et je la supprime selon la condition sur a.
Dans mon cas b n'existe pas à la base je la crée que lorsque ma condition sur a est remplie (a prend la même valeur sur toutes les lignes c'est un paramètre de ma macro). Ce n'est pas la même approche.

Peut être le contexte vous éclairera sur le besoin:

J'ai une table avec des clients.
Pour chacun des clients j'ai l'historique de ses prestations (peut être des rentes inval, des rentes de retraite....)
Exemple:
Cl1 mt_31_DEC_2001...mt_31_DEC_2006....mt_1_2010...mt_7_2010
25 100 500 50 50
Pour tous les montants avant l'année en cours, j'ai les montants au 31 DEC et pour mon année en cours je ventile par les montants mensuels.
Dans l'exemple je suis au mois de juillet.
Je fais des stats tous les mois, j'ai donc une variable macro qui s'incrémente à travers une boucle.
Arrivée en décembre (donc mt_12_2010) j'ai une année complète donc je voudrais avoir mt_31_DEC_2010 de rajouter à ma table avant de débuter les mensuels de 2011.
Je ne voudrais pas afficher cette variable tant que l'on est pas arrivé en décembre.

Comme je disais plus haut à défaut de solution je l'afficherai quand même toute l'année et elle ne sera alimentée que rendu en décembre.
MDsas est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h49.


 
 
 
 
Partenaires

Hébergement Web