Publié le :
Macro CREATION_INTERNE

Macro pour supprimer des mots d'une chaîne de caractères

Cette macro-fonction, nommée RemoveWords, prend en entrée une chaîne de caractères source et une chaîne de mots cibles, toutes deux délimitées par des espaces. Elle retourne la chaîne source après en avoir retiré toutes les occurrences des mots cibles. La recherche peut être sensible ou non à la casse, contrôlée par le paramètre 'casesens'. Le traitement s'effectue par des boucles imbriquées pour comparer chaque mot de la chaîne source à chaque mot de la liste cible. Elle ne supprime pas des sous-chaînes (par exemple, 'low' dans 'yellow').
Analyse des données

Type : CREATION_INTERNE


La macro ne lit aucune donnée externe ou de SASHELP. Elle opère exclusivement sur les chaînes de caractères qui lui sont fournies en paramètres lors de son appel.

1 Bloc de code
Macro
Explication :
Ce bloc définit une macro SAS nommée 'RemoveWords' avec trois paramètres : 'string' (chaîne source), 'targetwords' (mots à supprimer), et 'casesens' (sensibilité à la casse, 'N' par défaut). La macro initialise des variables locales. Elle parcourt chaque mot de la chaîne source avec une première boucle DO. Pour chaque mot, une seconde boucle DO imbriquée le compare à chaque mot de la liste cible. Si une correspondance est trouvée (en respectant la sensibilité à la casse), un indicateur 'matchFlag' est activé et la boucle interne s'arrête. Si aucun mot cible ne correspond, le mot source est concaténé à la variable 'result'. Finalement, la fonction %SYSFUNC(COMPBL) nettoie les espaces multiples dans la chaîne de résultat, qui est ensuite retournée par la macro.
Copié !
1%macro RemoveWords(string,targetwords,casesens=N);
2 
3 %local i j RESULT matchFlag NumTargetwords NumStringwords word targWord ;
4 
5 %IF not %LENGTH(&casesens.) %THEN %let casesens = N ;
6 %let casesens = %upcase(%substr(&casesens.,1,1));
7 
8 %let NumStringwords = %words(&string.);
9 %let NumTargetwords = %words(&targetwords.);
10 
11 %DO i = 1 %to &NumStringwords. ;
12 %let matchFlag = 0 ;
13 %let word = %scan(&string.,&i.,%str( ));
14 %DO j = 1 %to &NumTargetwords. ;
15 %let targWord = %scan(&targetwords.,&j.,%str( ));
16 %IF (("&casesens." EQ "Y") AND ("&targWord." = "&word.")) OR ("%upcase(&targWord.)" = "%upcase(&word.)") %THEN %DO;
17 %let matchFlag = 1 ;
18 %let j = &NumTargetwords. ;
19 %END;
20 %END;
21 %IF (not &matchFlag.) %THEN %let RESULT = &RESULT. &word. ;
22 %END;
23 
24 %IF %LENGTH(&RESULT.) %THEN %let RESULT = %sysfunc(compbl(&RESULT.));
25 &RESULT.
26 
27%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 : / Copyright © 2022, SAS Institute Inc., Cary, NC, USA. All Rights Reserved. / SPDX-License-Identifier: Apache-2.0