Data Science & SAS : Ne rédigez plus jamais vos boucles conditionnelles à la main

Ce code est également disponible en : Deutsch English Español
Niveau de difficulté
Confirmé
Publié le :
Simon

Le Conseil de l'Expert

Simon
Expert SAS et fondateur.

Pour optimiser votre macro et éviter les erreurs de compilation sur des listes de valeurs contenant des caractères spéciaux comme des parenthèses ou des esperluettes, remplacez %scan par %qscan et %sysfunc(quote(...)) par %qsysfunc(quote(...)) afin de masquer les caractères de résolution macro pendant la génération du code dans la log.

Cette macro parcourt une liste de valeurs spécifiée dans le paramètre 'values'. Pour chaque valeur, elle construit une instruction conditionnelle 'if var=valeur then do; ... end;' et l'écrit dans la journalisation (log) via %PUT. Elle gère l'ajout de guillemets autour des valeurs si le paramètre 'quote' est activé. Elle dépend d'une macro externe nommée '%AHGcount' pour compter les éléments.
Analyse des données

Type : CREATION_INTERNE


Le code n'accède à aucune donnée externe ou table SAS. Il traite uniquement les chaînes de caractères passées en paramètres.

1 Bloc de code
MACRO
Explication :
Définition de la macro. Elle boucle sur le nombre d'éléments retourné par %AHGcount. À chaque itération, elle extrait une valeur via %SCAN, applique éventuellement des guillemets via %SYSFUNC(QUOTE), puis utilise %PUT pour écrire la syntaxe d'un bloc IF/THEN/DO SAS dans la log.
Copié !
1%macro AHGifstat(var,values,quote=0,dlm=%str( ));
2 %local i one;
3
4 %DO i=1 %to %AHGcount(&values,dlm=&dlm);
5 %IF "e %THEN %let one=%sysfunc(quote(%scan(&values,&i,&dlm)));
6 %ELSE %let one= %scan(&values,&i,&dlm);
7 %put %str(IF &var=&one THEN );
8 %put %str( DO;);
9 %put %str( );
10 %put %str( END;);
11 %put %str( );
12 %END;
13 
14%mend;
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.