Publié le :
Macro CREATION_INTERNE

Macro d'Analyse de Chaînes de Caractères

Ce code est également disponible en : Deutsch English Español Français
La macro `%parse` est un outil flexible pour le traitement de chaînes de caractères. Elle prend en entrée une variable ou une chaîne (`var`), un ensemble de caractères de délimitation (`with`), et une action (`action`) à appliquer à chaque 'mot' ou 'phrase' extrait. Elle utilise la fonction `scan` de SAS© dans une boucle `do until` pour itérer sur les éléments. Les paramètres `nextword` et `nwords` permettent de récupérer le mot courant et son index. L'action peut être une instruction SAS© ou l'appel d'une autre macro (avec `%nrquote`).
Analyse des données

Type : CREATION_INTERNE


La macro opère sur une chaîne de caractères fournie comme paramètre `var`. Elle ne lit ni ne crée de jeux de données SAS externes ou internes. Les données sont transformées directement à partir de l'entrée de la macro.

1 Bloc de code
MACRO
Explication :
Ce bloc définit la macro `%parse` et contient sa logique principale. Il initialise la longueur de la variable `&nextword` à 80 caractères. La variable d'entrée `var` est assignée à une variable `string` après avoir été quotée pour préserver son contenu. Un compteur `&nwords` est initialisé à 0. Une boucle `do until` est utilisée pour extraire séquentiellement chaque mot de `string` en incrémentant `&nwords` et en utilisant la fonction `scan` avec les délimiteurs définis par `with`. Pour chaque mot non vide trouvé, l'action spécifiée par le paramètre `action` est exécutée (le `%quote` autour de `&action` permet d'assurer que l'action est interprétée littéralement au moment de l'exécution de la macro).
Copié !
1%macro parse
2 (
3 var, /* input character var or string */
4 with, /* characters to parse on */
5 ACTION, /* action for each parsed word */
6 nextword=nextword, /* variable to assign next word to */
7 nwords=nwords /* the index of the word in the string */
8 );
9
10%* Parse "var" with "with". For each parsed word, DO "action".;
11%*
12%*
13%* "VAR" is a SAS character variable or character string.
14%*
15%* "WITH" is a character or SET of characters that break "var"
16%* into words or phrases (passed to the "scan" function).
17%*
18%* "ACTION" is an ACTION to take for each word or phrase.
19%*
20* I usually use "LINK label" as the ACTION, and have the subroutine
21* at "label" issue a "return" to get back here.
22* IF the ACTION is invoking a macro, use the "%nrquote" function.
23%*
24*
25* barry grau
26* u42054 @uicvm.bitnet
27* u42054 @uicvm.uic.edu
28* fall 1987
29%*
30;
31
32LENGTH &nextword $ 80;
33
34string=%quote(&var);
35&nwords=0;
36
37* for each parsed "word", set &nextword="word" and do the "action".;
38DO until (&nextword=' ');
39 &nwords=&nwords+1;
40 &nextword=scan(string,&nwords,&with);
41 IF ^(&nextword=' ')
42 THEN DO;
43 %quote(&ACTION);
44 END;
45 END;
46
47%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.
Informations de Copyright : Auteur: barry grau Contact: u42054 @uicvm.bitnet, u42054 @uicvm.uic.edu Date: automne 1987