Publié le :
Macro CREATION_INTERNE

Suppression des doublons dans une liste

Ce code est également disponible en : Deutsch English Español
Cette macro SAS©, nommée `nodup`, prend en entrée une liste d'éléments séparés par des espaces et un indicateur optionnel pour la sensibilité à la casse. Elle parcourt la liste, compare chaque élément aux suivants et construit une nouvelle liste en incluant uniquement les éléments uniques. Elle peut fonctionner en mode sensible ou insensible à la casse selon le paramètre `casesens` ('Y' pour sensible, 'N' pour insensible).
Analyse des données

Type : CREATION_INTERNE


La macro traite une liste de chaînes de caractères fournie comme argument d'entrée, elle ne lit pas de données depuis des fichiers externes ou des bibliothèques SAS.

1 Bloc de code
MACRO
Explication :
Ce bloc de code définit la macro `%nodup`. Elle accepte deux paramètres : `list` (la chaîne d'entrée contenant les éléments séparés par des espaces) et `casesens` (un drapeau 'Y'/'N' pour activer/désactiver la sensibilité à la casse, par défaut 'N'). La macro convertit d'abord `casesens` en majuscule et prend la première lettre. Elle détermine le nombre d'éléments dans la liste (`NumItems`). Une boucle externe itère sur chaque élément (`item`) de la liste. Pour chaque `item`, une boucle interne compare cet `item` aux éléments suivants de la liste. La comparaison est effectuée en tenant compte de la sensibilité à la casse (si `casesens` est 'Y', la comparaison est directe ; sinon, elle est faite après conversion en majuscules). Si un élément n'a pas de doublon après la position actuelle, il est affiché en sortie de macro. Les variables `i`, `j`, `match`, `item`, et `NumItems` sont déclarées comme locales pour éviter les interférences avec d'autres macros ou variables globales.
Copié !
1/*
2/ Copyright © 2022, SAS Institute Inc., Cary, NC, USA. All Rights Reserved.
3/ SPDX-License-Identifier: Apache-2.0
4/
5/ Program : NoDup.sas
6/ Author : Noah Powers
7/ Created : 2019
8/ Purpose : Function-style macro to remove duplicates in a space-delimited list
9/ Usage : %let str=%nodup(aaa bbb aaa)
10/ Notes :
11/============================================================================================
12/ Parameters Usage
13/ -------------------------------------------------------------------------------------
14/ Name Description
15/ -------------------------------------------------------------------------------------
16/ list (positional) space delimited list of items to de-dup
17/ casesens Y/N Flag to make process case sensitive or not
18/============================================================================================*/
19%macro nodup(list,casesens=N);
20 
21 %local i j match item NumItems ;
22 
23 %IF not %LENGTH(&casesens.) %THEN %let casesens = N ;
24 %let casesens = %upcase(%substr(&casesens.,1,1));
25 %let NumItems = %words(&list.) ;
26 
27 %DO i = 1 %to &NumItems. ;
28 %let item = %scan(&list.,&i.,%str( ));
29 %let match = N ;
30 %IF (&i. < &NumItems.) %THEN %DO j = %eval(&i. + 1) %to &NumItems. ;
31 %IF (&casesens. = Y) %THEN %DO;
32 %IF "&item." = "%scan(&list.,&j.,%str( ))" %THEN %let match = Y ;
33 %END;
34 %ELSE %DO;
35 %IF "%upcase(&item.)" = "%upcase(%scan(&list.,&j.,%str( )))" %THEN %let match = Y ;
36 %END;
37 %END;
38
39 %IF (&match. = N) %THEN &item. ;
40 %END;
41 
42%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