J'ai fait une macro qui prends parmi les autres paramètres la liste des valeurs séparés par une virgule. Évidement on ne peut pas juste mettre cette liste dans la ligne d'appel de la macro - SAS verra les virgules, pensera qu'il s'agit de plusieurs paramètres au lieu d'un et affichera l'erreur "ERREUR: Nbre de paramètres positionnels supérieur au nbre de paramètres définis."
Donc, j'utilise la fonction %str pour (si je comprends bien son fonctionnement) remplacer les caractères spéciaux (genre virgule) par d'autres caractères qui seront traités ensuite comme des remplaçants des virgules. Mon code est :
Tous fonctionne à merveille. Mes je n'écris pas que pour vous faire part de cet exploit. Le problème commence quand je veux alimenter la variable "variables" d'une manière plus automatique. A vrai dire elle est composée des champs d'une table, donc je peux lire la view sashelp.COLUMNS :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 %let variables = %str(NB_SIN, REG_BRUT, FRANCHISE); %normalizeTriangle(EX_SURV_SIN, DEROULEMENT, %str(&variables.));
Au premier regard (%put &variables.;) ma variable contient exactement la même chose qu'avant. Or quand j'appelle ma macro avec %str(&variables.) comme paramètre j'ai bon vieux "ERREUR: Nbre de paramètres positionnels supérieur au nbre de paramètres définis."
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 proc sql; select NAME into :variables separated by ", " from sashelp.VCOLUMN where MEMNAME = "TR_PLAT" and NAME not in ("EX_SURV_SIN", "DEROULEMENT") ; quit;
Est-ce que quelqu'un comprends ce qui se passe ? Comment faire ?
Partager