Publicado el :
Macro CREATION_INTERNE

Macro _COUNT: Contar elementos de una lista

Este código también está disponible en: Français Deutsch English
Esta macro, llamada _COUNT, tiene como objetivo determinar el número de elementos en una cadena de caracteres donde los elementos están separados por un delimitador. Por defecto, el delimitador es el espacio, pero se puede modificar a través del parámetro 'SPLIT'. La macro toma como entrada la lista a analizar (parámetro posicional ARG1 o nombrado TEXT). Dispone de una opción 'NOTES' para mostrar el resultado directamente en el log de SAS©. Se incluye un mecanismo de gestión de errores simple para interceptar las advertencias de tipo 'Apparent symbolic reference' y detener la ejecución si es necesario. El código también contiene una sección de pruebas de validación, comentada, que demuestra diversos casos de uso.
Análisis de datos

Type : CREATION_INTERNE


La macro no lee ningún dato externo o de la librería SASHELP. Opera exclusivamente sobre las cadenas de caracteres pasadas como parámetros durante su llamada.

1 Bloque de código
%PUT
Explicación :
Muestra notas iniciales en el log de SAS, incluyendo la fecha de llamada y la información de copyright.
¡Copiado!
1%put NOTE: You have called the macro _COUNT, 2022-06-07.;
2%put NOTE: Copyright (c) 2001-2022 Rodney Sparapani;
3 
2 Bloque de código
MACRO
Explicación :
Definición de la macro '_count'. Inicializa un contador local 'i' a 0. Luego, un bucle '%do %while' recorre la cadena de entrada ('text') utilizando la función '%qscan' para extraer los elementos uno por uno, basándose en el delimitador 'split'. El contador 'i' se incrementa para cada elemento encontrado. Después del bucle, la macro verifica la presencia de una advertencia específica y se detiene en caso de problema. De lo contrario, devuelve el valor final del contador 'i'. Si el parámetro 'notes' está especificado, el valor devuelto también se muestra en el log.
¡Copiado!
1%macro _count(arg1, text=&arg1, notes=, split=%str( ));
2 %local i;
3 %let i=0;
4 
5 %*DO %while(%LENGTH(%nrbquote(%scan(%nrbquote(&text), &i+1, &split))));
6 %DO %while(%LENGTH(%qscan(&text, &i+1, &split)));
7 %let i=%eval(&i+1);
8 %END;
9%IF "%_substr(%superq(syswarningtext), 1, 27)"="Apparent symbolic reference"
10%THEN %DO;
11 %put ERROR: _COUNT() cannot recover from warning: ABEND;
12 %_abend();
13%END;
14%ELSE &i;
15 
16 %IF %LENGTH(¬es) %THEN %put NOTE: _COUNT is returning the value: &i.;
17%mend _count;
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 (c) 2001-2022 Rodney Sparapani. El código se distribuye bajo los términos de la Licencia Pública General GNU (GPL) versión 2 o posterior.