Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > Macro
Macro Forum d'entraide sur le langage Macro de SAS
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 02/06/2011, 11h38   #1
Invité de passage
 
Inscription : juin 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 3
Points : 1
Points : 1
Par défaut Boucle macro SAS

Bonjour ,

Alors j'ai une question qui peut être n'a pas de solution...

J'ai crée une macro sas permettant de faire des graphiques: ci dessous

Code :
1
2
3
4
5
6
7
8
9
%Macro Analyse_fides (TABLE=,  var1=,  var2=,);
proc gchart DATA= &TABLE; 
vbar &var1 / subgroup = &var2; 
run;
quit;
%MEND ;
 
%Analyse_fides (TABLE=fides.Fides , var1= Fid_FicStruct2 , var2= Type_); 
%Analyse_fides (TABLE=fides.Fides , var1= Fid_FicStruct_Prev , var2= Type_);

Le problème est que j'ai beaucoup d'autres variables et je me demandais si il était possible de faire une boucle.
Si oui, je ne vois pas bien comment la réaliser =(

Merci par avance de l'aide que vous pourrez m'apporter.
oboulot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2011, 15h02   #2
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Bonjour,
Ce que tu veux ressemble à quelque chose comme ça:

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
PROC CONTENTS DATA=SASHELP.CLASS OUT=CLASS(WHERE=(TYPE=1));
RUN;
 
DATA _NULL_;
SET CLASS;
CALL SYMPUT("var"!!LEFT(_N_),NAME);
CALL SYMPUT("loop",_N_);
RUN;
 
%PUT &var1;
%PUT &var2;
%PUT &var3;
%PUT &loop.;
 
%MACRO Analyse_fides (TABLE=, var2=);
 
%DO i=1 %TO &loop.;
	proc gchart DATA= &TABLE;
	vbar &&var&i. / subgroup = &var2.;
	run;
	quit;
%END;
%MEND Analyse_fides ;
%Analyse_fides (TABLE=SASHELP.CLASS,  var2=Sex);
Bon courage!
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2011, 15h45   #3
Invité de passage
 
Inscription : juin 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 3
Points : 1
Points : 1
Merci pour cette réponse aussi rapide !

Est ce que ca vous dérangerai de mettre des commentaires pour que je comprenne un peu plus ce qui se passe et à quel moment.
Je n'ai encore jamais fait de boucle sur sas et j'ai un peu de mal à comprendre.

Merci encore ^^
oboulot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2011, 09h38   #4
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
tiens si tu veux voir une boucle plus petite, entraîne toi avec une boucle autour des %PUT de Brice.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
%PUT &var1;
%PUT &var2;
%PUT &var3; 

Devient :

%macro tourneenrond;

%do i = 1 %to %loop;

%put &&var&i ;

%end;

%mend ;

%tourneenrond;
Le & en bleu est nécessaire pour résoudre &var1 après que &i soit résolu.
__________________
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 00
Vieux 03/06/2011, 18h07   #5
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Voici une version documentée

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
%MACRO ANALYSE_FIDES(TABLE=, type_=); 
 
	PROC CONTENTS DATA=&TABLE. OUT=CLASS(WHERE=(TYPE=1));/* on ne garde que des variables continues (type=1)*/
	RUN; 
 
	DATA _NULL_;
	SET CLASS END=EOF                  ;/* on se positionne à la dernière ligne de la table */
	CALL SYMPUT("var"!!LEFT(_N_),NAME) ;/* on stock chaque variable dans une macro ( _N_=compteur du nombre de  ligne)*/
	IF EOF THEN CALL SYMPUT("loop",_N_);/* si on est en fin de fichier alors loop=dernier _N_ */
	RUN;
 
	%DO i=1 %TO &loop.;
 
	 %PUT var&i.=&&var&i.; /* afficher dans l'output*/
		proc gchart DATA= &TABLE;
		vbar &&var&i. / subgroup = &var2.;/* pour i=1 &&var&i=var1=Age*/
		run;
		quit;	
	%END;
 
%MEND ANALYSE_FIDES ;
 
%ANALYSE_FIDES(TABLE=SASHELP.CLASS,  type_=Sex);
 
 
/*  si jamais t'as pas compris SAS gère le compeur _N_, voici un exemple*/
DATA test;
input s;
compteur=_N_;/*  < =====*/
cards;
78
45
12
36
;
run;
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/06/2011, 19h56   #6
Invité de passage
 
Inscription : juin 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 3
Points : 1
Points : 1
Merci pour ces infos supplémentaires !
oboulot 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 18h15.


 
 
 
 
Partenaires

Hébergement Web