Publié le :
Macro SASHELP

Utilisation de listes de variables macro pour des programmes dynamiques

Ce code est également disponible en : Deutsch English Español
Ce script SAS© illustre la création dynamique d'une liste verticale de variables macro. À partir du jeu de données SASHELP.CLASS, il génère des variables macro nommées STUDENT1 à STUDENT19, chacune contenant le nom d'un élève. Une variable macro supplémentaire, NUM_STUDENTS, est créée pour stocker le nombre total d'élèves dans la liste. La création se fait via une étape DATA et l'utilisation de la fonction CALL SYMPUTX. Le script inclut ensuite une section de vérification qui affiche le contenu de ces nouvelles variables macro dans le log SAS©.
Analyse des données

Type : SASHELP


Les données d'entrée proviennent du jeu de données interne SASHELP.CLASS, disponible par défaut dans SAS.

1 Bloc de code
DATA STEP
Explication :
Cette étape DATA _NULL_ parcourt le jeu de données SASHELP.CLASS. Pour chaque observation, CALL SYMPUTX est utilisée pour créer une variable macro nommée 'STUDENT' suivie du numéro d'observation (_n_) et lui attribuer la valeur de la variable 'name'. Lorsque la fin du fichier est atteinte (end=eof), une variable macro 'NUM_STUDENTS' est créée et contient le nombre total d'observations traitées.
Copié !
1DATA _null_;
2 SET sashelp.class END=eof;
3 call symputx(cats('STUDENT',_n_),name);
4 IF eof THEN call symputx('NUM_STUDENTS',_n_);
5RUN;
2 Bloc de code
MACRO STATEMENT
Explication :
Ce bloc utilise l'instruction %PUT pour afficher les valeurs des variables macro créées précédemment (NUM_STUDENTS et les variables STUDENTx) directement dans le log SAS. Les options NOSOURCE et SOURCE sont utilisées pour masquer ou afficher le code SAS lui-même dans le log, respectivement, permettant de mettre en évidence les résultats des %PUT.
Copié !
1* Verify the contents of the new macro variables by printing to the SAS log.;
2options nosource;
3%put ======================;
4%put Number of Students: &NUM_STUDENTS;
5%put;
6%put Student 1: &STUDENT1;
7%put Student 2: &STUDENT2;
8%put Student 3: &STUDENT3;
9%put ...;
10%put Student 17: &STUDENT17;
11%put Student 18: &STUDENT18;
12%put Student 19: &STUDENT19;
13%put ======================;
14options SOURCE;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : HANDS-ON WORKSHOP, Title: Using SAS Macro Variable Lists to Create Dynamic Data-Driven Programs, Instructor: Josh Horstman


Banner
Le Conseil de l'Expert
Expert
Stéphanie
Spécialiste Machine Learning et IA.
« La génération de variables macro "verticales" est une technique de programmation pilotée par les données (data-driven) qui permet de transformer chaque ligne d'une table en une instruction potentielle. L'astuce réside dans l'utilisation de CALL SYMPUTX combinée à la fonction CATS : en associant un préfixe textuel au compteur automatique _N_, vous créez une série de jetons uniques (STUDENT1, STUDENT2, etc.) directement exploitables par des boucles macro. Cette méthode est bien plus flexible qu'une liste codée en dur, car elle s'adapte instantanément si votre table source évolue, sans aucune modification manuelle du code. »