Macro SAS : utiliser les données d'un fichier

Résolu/Fermé
ju_mp Messages postés 23 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 16 mai 2010 - 9 mars 2009 à 10:55
ju_mp Messages postés 23 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 16 mai 2010 - 10 mars 2009 à 09:03
Bonjour,
J'ai écrit une macro SAS qui fonctionne... jusque là tout va bien.
Pour l'exécuter, il faut entrer 3 paramètres : ESA ESS et beta. En tout, j'ai 72 combinaisons de ces paramètres. qui sont contenues dans un table de ce genre :
ESA ESS beta
0.25 0.25 0.1
0.25 0.33 0.1
0.25 0.25 0.2
0.25 0.33 0.2
0.33 0.25 0.1
0.33 0.33 0.1
...
Donc je voudrais exécuter ma macro sans avoir à écrire 72 fois '%nb(ESA, ESS, beta);' pour éviter de faire des erreurs.
J'aimerais savoir s'il y a un moyen d'utiliser les données qui sont dans ma table ci-dessus.
J'ai en fait essayé de créer une étape data avec des call symput :
data param;
set param;
call symput ('ES_A', ES_A);
call symput ('ES_S', ES_S);
call symput ('beta', beta);
run;
Mais lorsque je lance ma macro, comme ceci : %nb(&ES_S, &ES_A, &beta);
je n'obtiens un résultat que pour la dernière ligne de ma table.

Si vous pouviez m'aider, ça serait vraiment sympa.
Merci d'avance.
Ju_mp
A voir également:

1 réponse

ju_mp Messages postés 23 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 16 mai 2010
10 mars 2009 à 09:03
Bonjour,
Bon, je réponds à mes propres questions, car j'ai eu de l'aide par ailleurs, et je me dis que ça peut peut-être aider quelqu'un :

Il faut utiliser un pgm comme ci-dessous :

Code :

DATA _null_;
SET param end=fin;
call symput("ES_A" || compress(_N_),ES_A);
call symput("ES_S" || compress(_N_),ES_S);
call symput("beta" || compress(_N_),beta);
call symput("M_N", compress(_N_));
run;

Ainsi pour chaque ligne de la table PARAM, tu récupéres 3 macros variables :

ES_A1, ES_S1 et beta1 pour la ligne 1, ...

M_N te donne le nombre de lignes traités et permet ensuite de faire une boucle :

Code :

%do i=1 %TO &M_N;
%nb(&&ES_S&i,&&ES_A&i, &&beta&i);
run;
%end;
0