Appel d'une marco dans un macro
Bonjour à tous,
J'ai défini une macro qui compte simplement le nombre de valeurs dans une liste. Je voudrais ensuite utiliser ce nombre dans une autre macro. Explications :
Code:
1 2 3 4 5 6 7 8 9
|
/*Cette macro compte simplement le nombre d'éléments dans liste*/
%macro nb_elements(liste);
%let i=1;
%do %while(%length(%scan(&liste,&i))NE 0);
%let i=%eval(&i+1);
%end;
%let nb=%eval(&i-1);
%mend nb_elements; |
Je voudrais ensuite utiliser cette macro dans dans une autre macro
Code:
1 2 3 4 5 6 7 8 9 10
|
%macro parangons(table,ident,listevar,classe);
%let n=%nb_elements(&listevar);
%put &n;
proc means data=&table mean std;
var &listevar;
class &classe;
output out=moyennes mean=m1-m&n std=sigma1-sigma&n;
run;
%mend parangons; |
J'ai fait exprès de mettre le %put pour vérifier que le nombre d'éléments a été bien récupéré.
Mais quand j’exécute la macro parangons :
Code:
1 2 3 4 5
|
%parangons(matable,
cle,
v1 v2 v3 v4 v5 v6 v7 v8,
cluster); |
Mais j'ai une erreur :
Code:
1 2 3
|
ERREUR: m n'a pas un suffixe numérique.
ERREUR: sigma n'a pas un suffixe numérique. |
Donc il ne me reconnait pas le m. Pourtant dans la première macro je récupère bien le nombre. Je n'arrive pas à comprendre pourquoi.
Merci de votre aide.
Récupérer la valeur d'une macro fonction
Merci Olivier. :ccool:
Je ne connaissais pas la troisième solution que tu proposes. elle est beaucop plus simple