Publié le :
Macro CREATION_INTERNE

Génération de clauses WHEN pour blocs SELECT (_bwhen)

Ce code est également disponible en : Deutsch English Español
La macro _bwhen remplace une ancienne macro %_WHEN devenue instable en SAS© 9.3. Elle utilise l'option /PARMBUFF pour accepter une liste variable d'arguments (valeurs individuelles, plages de valeurs avec tirets). Elle s'appuie sur des macros externes (%_count, %_list) pour parser cette liste (gérant les parenthèses et virgules) et restituer une syntaxe 'when(...)' correctement formatée pour le Data Step.
Analyse des données

Type : CREATION_INTERNE


La macro effectue de la génération de code et de la manipulation de chaînes de caractères. Elle ne lit aucune table de données.

1 Bloc de code
MACRO
Explication :
Définition de la macro. Elle calcule le nombre d'éléments via %_count, puis boucle pour générer le contenu de l'instruction when() en utilisant %_list et %qscan pour formater chaque élément.
Copié !
1%macro _bwhen/parmbuff;
2 
3%local i j;
4 
5%*put SYSPBUFF=&syspbuff;
6 
7%let j=%_count(&syspbuff, split=%str(,()));
8 
9when(%DO i=1 %to &j;
10 %_list(%qscan(&syspbuff, &i, %str(,())), split=%str(,)) %IF &i<&j %THEN ,;
11%END;)
12 
13%mend _bwhen;
2 Bloc de code
DATA STEP
Explication :
Code de test (actuellement en commentaire) démontrant l'utilisation de la macro dans un Data Step pour vérifier si une variable 'hcpcs_cd' appartient à une longue liste de codes ou de plages.
Copié !
1/* Exemple de validation (commenté dans la source) */
2DATA _null_;
3 
4 hcpcs_cd='63279';
5 
6 select(hcpcs_cd);
7 %_bwhen('22100', '22110', '22318', '22319', '22326', '22548',
8 '22590', '22595', '61343', '63180', '63182', '63194', '63196', '63198',
9 '63250', '63265'-'63285', '63300', '63304') ex15=1;
10 otherwise;
11 END;
12 
13 put ex15=;
14RUN;
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 : Copyright (c) 2013 Rodney Sparapani