Publié le :
Macro CREATION_INTERNE

Macro _COUNT : Compter les éléments d'une liste

Ce code est également disponible en : Deutsch English Español
Cette macro, nommée _COUNT, a pour but de déterminer le nombre d'éléments dans une chaîne de caractères où les éléments sont séparés par un délimiteur. Par défaut, le délimiteur est l'espace, mais il peut être modifié via le paramètre 'SPLIT'. La macro prend en entrée la liste à analyser (paramètre positionnel ARG1 ou nommé TEXT). Elle dispose d'une option 'NOTES' pour afficher le résultat directement dans le journal SAS©. Un mécanisme de gestion d'erreur simple est inclus pour intercepter les avertissements de type 'Apparent symbolic reference' et arrêter l'exécution si nécessaire. Le code contient également une section de tests de validation, commentée, qui démontre divers cas d'utilisation.
Analyse des données

Type : CREATION_INTERNE


La macro ne lit aucune donnée externe ou de la librairie SASHELP. Elle opère exclusivement sur les chaînes de caractères passées en paramètres lors de son appel.

1 Bloc de code
%PUT
Explication :
Affiche des notes initiales dans le journal SAS, incluant la date d'appel et l'information de copyright.
Copié !
1%put NOTE: You have called the macro _COUNT, 2022-06-07.;
2%put NOTE: Copyright (c) 2001-2022 Rodney Sparapani;
3 
2 Bloc de code
MACRO
Explication :
Définition de la macro '_count'. Elle initialise un compteur local 'i' à 0. Ensuite, une boucle '%do %while' parcourt la chaîne d'entrée ('text') en utilisant la fonction '%qscan' pour extraire les éléments un par un, en se basant sur le délimiteur 'split'. Le compteur 'i' est incrémenté pour chaque élément trouvé. Après la boucle, la macro vérifie la présence d'un avertissement spécifique et s'arrête en cas de problème. Sinon, elle retourne la valeur finale du compteur 'i'. Si le paramètre 'notes' est renseigné, la valeur retournée est également affichée dans le journal.
Copié !
1%macro _count(arg1, text=&arg1, notes=, split=%str( ));
2 %local i;
3 %let i=0;
4 
5 %*DO %while(%LENGTH(%nrbquote(%scan(%nrbquote(&text), &i+1, &split))));
6 %DO %while(%LENGTH(%qscan(&text, &i+1, &split)));
7 %let i=%eval(&i+1);
8 %END;
9%IF "%_substr(%superq(syswarningtext), 1, 27)"="Apparent symbolic reference"
10%THEN %DO;
11 %put ERROR: _COUNT() cannot recover from warning: ABEND;
12 %_abend();
13%END;
14%ELSE &i;
15 
16 %IF %LENGTH(¬es) %THEN %put NOTE: _COUNT is returning the value: &i.;
17%mend _count;
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) 2001-2022 Rodney Sparapani. Le code est distribué sous les termes de la GNU General Public License (GPL) version 2 ou ultérieure.