Publicado el :
Macro CREATION_INTERNE

Eliminación de duplicados en una lista

Este código también está disponible en: Deutsch English Français
Esta macro SAS©, llamada `nodup`, toma como entrada una lista de elementos separados por espacios y un indicador opcional para la sensibilidad a mayúsculas y minúsculas. Recorre la lista, compara cada elemento con los siguientes y construye una nueva lista incluyendo solo los elementos únicos. Puede funcionar en modo sensible o insensible a mayúsculas y minúsculas según el parámetro `casesens` ('Y' para sensible, 'N' para insensible).
Análisis de datos

Type : CREATION_INTERNE


La macro procesa una lista de cadenas de caracteres proporcionada como argumento de entrada, no lee datos de archivos externos o bibliotecas SAS.

1 Bloque de código
MACRO
Explicación :
Este bloque de código define la macro `%nodup`. Acepta dos parámetros: `list` (la cadena de entrada que contiene los elementos separados por espacios) y `casesens` (un indicador 'Y'/'N' para activar/desactivar la sensibilidad a mayúsculas y minúsculas, por defecto 'N'). La macro primero convierte `casesens` a mayúsculas y toma la primera letra. Determina el número de elementos en la lista (`NumItems`). Un bucle externo itera sobre cada elemento (`item`) de la lista. Para cada `item`, un bucle interno compara este `item` con los siguientes elementos de la lista. La comparación se realiza teniendo en cuenta la sensibilidad a mayúsculas y minúsculas (si `casesens` es 'Y', la comparación es directa; de lo contrario, se realiza después de la conversión a mayúsculas). Si un elemento no tiene duplicados después de la posición actual, se muestra como salida de la macro. Las variables `i`, `j`, `match`, `item` y `NumItems` se declaran como locales para evitar interferencias con otras macros o variables globales.
¡Copiado!
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 ;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información de copyright : Copyright © 2022, SAS Institute Inc., Cary, NC, USA. All Rights Reserved. SPDX-License-Identifier: Apache-2.0