La macro %hasvarsc est un excellent exemple de programmation défensive, indispensable pour créer des applications SAS robustes et évolutives. En vérifiant dynamiquement l'existence et le type (caractère) des variables avant toute exécution, vous évitez les arrêts brutaux de vos programmes dus à des structures de tables inattendues. L'intelligence de cet outil réside dans l'utilisation de la variable globale _nomatch_, qui permet non seulement de savoir si un test a échoué (retour 0), mais aussi d'identifier précisément quelles variables font défaut. C'est un composant idéal à intégrer au début de vos processus ETL ou de vos macros de reporting pour garantir l'intégrité des données sources.
Type : MIXTE
La macro n'utilise pas de données en dur mais opère sur le jeu de données passé en paramètre (argument 'ds'). Elle analyse les métadonnées (noms des variables) de ce jeu de données.
| 1 | %put MACRO CALLED: hasvarsc v2.0; |
| 2 | |
| 3 | %macro hasvarsc(ds,varlist,casesens=no); |
| 4 | %local varmatch varlistc; |
| 5 | %IF not %LENGTH(&casesens) %THEN %let casesens=no; |
| 6 | %let casesens=%upcase(%substr(&casesens,1,1)); |
| 7 | %let varlistc=%varlistc(&ds); |
| 8 | %IF not %LENGTH(&varlistc) %THEN %DO; |
| 9 | %put NOTE: (hasvarsc) There are no character variables in the INPUT dataset therefore; |
| 10 | %put NOTE: (hasvarsc) the character variable(s) you are testing for will not be found.; |
| 11 | %let varmatch=%match(,&varlist,casesens=&casesens); |
| 12 | 0 |
| 13 | %END; |
| 14 | %ELSE %DO; |
| 15 | %let varmatch=%match(&varlistc,&varlist,casesens=&casesens); |
| 16 | %IF not %LENGTH(&_nomatch_) %THEN 1; |
| 17 | %ELSE 0; |
| 18 | %END; |
| 19 | %mend hasvarsc; |