L'astuce SAS pour détecter les variables manquantes et gérer la sensibilité à la casse

Ce code est également disponible en : Deutsch English Español
Niveau de difficulté
Expert
Publié le :
Stéphanie

Le Conseil de l'Expert

Stéphanie
Spécialiste Machine Learning et IA.

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.

Cette macro de style fonctionnel vérifie la présence d'une liste de variables de type caractère dans un jeu de données SAS© spécifié. Elle s'appuie sur les sous-macros '%match' et '%varlistc'. Si des variables ne correspondent pas, elles sont stockées dans la variable macro globale '_nomatch_'. La macro gère la sensibilité à la casse via le paramètre 'casesens'.
Analyse des données

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 Bloc de code
MACRO
Explication :
Définition de la macro '%hasvarsc'. Elle initialise les paramètres, appelle la macro '%varlistc' pour obtenir les variables caractères du dataset cible, et utilise la macro '%match' pour comparer cette liste avec la liste requise ('varlist'). Elle retourne 1 si toutes les variables sont trouvées, sinon 0 (avec un message d'avertissement si aucune variable caractère n'existe dans la source).
Copié !
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);
120
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;
L'Astuce Pro
Pour optimiser la robustesse de vos developpements, utilisez cette macro dans une instruction %SYSFUNC pour conditionner l execution de vos etapes DATA. L utilisation de la variable globale nomatch est un atout majeur car elle vous permet de generer un message d erreur personnalise listant precisement les colonnes manquantes, evitant ainsi un arret brutal du programme (abnormal termination) tout en garantissant que seules les tables conformes au dictionnaire de donnees sont traitees.
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 : Roland Rashleigh-Berry (Public Domain)