Publié le :
Macro Utilitaire CREATION_INTERNE

Retourne le dernier mot d'une liste délimitée

Ce code est également disponible en : Deutsch English
La macro LASTWORD est conçue pour extraire le dernier mot d'une chaîne de caractères spécifiée. Elle accepte deux paramètres : 'words' (la chaîne d'entrée contenant les mots) et 'sep' (le ou les caractères utilisés comme délimiteurs entre les mots, avec un espace par défaut).
Son fonctionnement est optimisé en fonction de la version de SAS© : pour SAS© 8 et les versions ultérieures, elle utilise la fonction macro %SCAN avec l'argument -1 pour récupérer directement le dernier mot. Pour les versions antérieures, elle implémente une boucle itérative qui utilise %SCAN pour parcourir les mots un par un jusqu'à identifier le dernier. Cette macro est fréquemment employée au sein d'instructions %LET pour assigner le mot extrait à une variable macro.
Analyse des données

Type : CREATION_INTERNE


Les données traitées par cette macro (la liste de mots et le séparateur) sont fournies directement en tant que paramètres lors de son appel, par exemple via des variables macro définies en interne ou des littéraux.

1 Bloc de code
MACRO
Explication :
Ce bloc définit la macro `%lastword` qui prend en entrée une liste de mots (`words`) et un séparateur optionnel (`sep`, un espace par défaut). Elle déclare les variables locales `N` et `W`. Le code vérifie la version de SAS à l'aide de `%sysevalf(&sysver >= 8)`. Si SAS est en version 8 ou ultérieure, il utilise `%scan(&words, -1, %quote(&sep))` pour extraire directement le dernier mot, car `%scan` avec un indice négatif permet d'accéder aux éléments en partant de la fin. Pour les versions antérieures, une boucle `%do %while` est employée pour parcourir séquentiellement les mots de la liste jusqu'à ce que `%scan` retourne une valeur vide, indiquant la fin de la liste. Le dernier mot trouvé est stocké dans la variable macro `W` et est renvoyé comme résultat de la macro.
Copié !
1/*--------------------------------------------------------------*
2 * Name: lastword.sas *
3 * Title: Return the last word from a delimited list of words *
4 Doc: http://www.datavis.ca/sasmac/lastword.html
5 *--------------------------------------------------------------*
6 * Author: Michael Friendly <friendly @yorku.ca> *
7 * Created: 26 Jan 2006 10:51:43 *
8 * Revised: 26 Jan 2006 10:51:43 *
9 * Version: 1.0 *
10 *
11 *--------------------------------------------------------------*/
12 /*=
13=Description:
14
15 The LASTWORD macro returns the last word from a delimited list of words.
16 This is useful for some generic forms of DATA Step BY processing with
17 first. and last. BY processing.
18 
19==Method:
20 
21 In Version 8+, it uses the %scan function in the form %scan(&words,-1,&sep)
22 The original version of this macro is by Richard A. DeVenezia.
23 
24=Usage:
25 
26 The LASTWORD macro is defined with positional parameters. The first
27 parameter is required for any useful result.
28 The macro is often used in a %LET statement, in the form
29
30 %let lastclass = %lastword(&class);
31
32==Parameters:
33 
34* WORDS A list of words separated by something
35 
36* SEP The word separator. [Default: SEP=%STR( )]
37
38==Example:
39 
40 %let string= Able Baker Charlie;
41 %put Last word of "&string" is "%lastword(&string)";
42 
43 %let classvar = Treatment Poison;
44 data test;
45 set animals;
46 by &classvar;
47 if first.%lastword(&classvar) then do;
48 ...
49 end;
50 
51 =*/
52 
53 
54%macro lastword(
55 words,
56 sep=%str( )
57 );
58 
59%* Richard A. DeVenezia - 940729; *%
60%*
61%* extract last word from list of words separated by a specified character; *%
62%*
63%* words - original list of words, separated with something; *%
64%*;
65 
66%local N W;
67%IF %sysevalf(&sysver >= 8) %THEN %DO;
68 %let W = %scan(&words, -1, %quote(&sep));
69 %END;
70 
71%ELSE %DO;
72 %let N=1;
73 %let W=%scan(&words,&N,%quote(&sep));
74 
75 %let N=2;
76 %DO %while (%scan(&words,&N,%quote(&sep))^=);
77 %let W=%scan(&words,&N,%quote(&sep));
78 %let N=%eval(&N+1);
79 %END;
80%END;
81 
82 &W
83 
84%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 : Nom: lastword.sas, Auteur: Michael Friendly <friendly @yorku.ca>, Créé/Révisé: 26 Jan 2006. Version originale: Richard A. DeVenezia. Documentation: http://www.datavis.ca/sasmac/lastword.html