Créer des macros variables indicées dans une étape DATA
La première étape consiste à utiliser les données d'une table déjà existante pour en faire des macro variables avec un indice sur le numéro de la ligne.
data _null_; /* pas besoin de table de sortie */
set sashelp.class end=last;
call symputx(compress("name"||_N_),name); /* Création de macro sur le nom */
call symputx(compress("age"||_N_),age); /* Création de macro sur le l'age */
if last then call symputx("end",_N_); /* Création d'une macro sur la dernière ligne */
run;
/*%put &name1.; --> Alfred */
La création de macro en série nous permet ensuite de faire une boucle et de réutiliser les valeurs indicées.
%macro print_macro; /* Création d'une macro simple pour afficher les valeurs */
%do i = 1 %to &end. ; /* --> Jusqu'au nb d'observations */
%put &&name&i.., &&age&i; /* Affichage des valeurs dans la log */
%end; /* Fin de la boucle */
%mend; /* Fin de la macro */
%print_macro; /* Appel de la macro */
Résultat dans la log:
Alfred, 14
Alice, 13
Barbara, 13
Carol, 14
Henry, 14
James, 12
Jane, 12
Janet, 15
Jeffrey, 13
John, 12
Joyce, 11
Judy, 14
Louise, 12
Mary, 15
Philip, 16
Robert, 12
Ronald, 15
Thomas, 11
William, 15