Macro list2format

Este código también está disponible en: Deutsch English Français
Nivel de dificultad
Principiante
Publicado el :
Esta macro SAS©, llamada `list2format`, genera dinámicamente un formato numérico SAS©. Acepta dos parámetros: `fmtname` para especificar el nombre del formato a crear, y `list` para una cadena de caracteres que contiene una lista de valores separados por comas e idealmente entre paréntesis (ej: `(ALT,BILI,CREAT)`). La macro analiza esta lista, extrae cada elemento y lo asocia secuencialmente a un número entero en la definición del formato a través de `PROC FORMAT`. Cada elemento de la lista se limpia de espacios superfluos utilizando `%sysfunc(strip())` antes de ser integrado en el formato. Es una herramienta práctica para convertir una lista de cadenas en un formato numérico utilizable para variables categóricas.
Análisis de datos

Type : CREACIÓN_INTERNA


Los datos utilizados para la creación del formato provienen de una lista de valores pasada como parámetro a la macro y procesada internamente, sin dependencia externa o de datos SASHELP.

1 Bloque de código
MACRO / PROC FORMAT Data
Explicación :
Este bloque define la macro `list2format`. Inicializa las variables locales `i` (contador) e `item` para iterar sobre la lista de valores proporcionada en el parámetro `&list`. La función `%qscan` se utiliza con `%nrbquote` para extraer cada elemento de la lista, teniendo en cuenta los delimitadores especificados (coma y paréntesis). Cada elemento extraído se almacena en una variable de macro dinámica (`list_&i`). Una vez que la lista ha sido completamente recorrida, `list_n` contiene el número total de elementos. Luego, se genera un bloque `PROC FORMAT`. Se utiliza un bucle `%do` para crear las asociaciones número=valor en la definición del formato. Para cada iteración, el número (`&i`) se asocia con el valor de la lista correspondiente (referenciada por `&&list_&i`) después de haber sido limpiado de espacios con `%sysfunc(strip())`. El `run;` final ejecuta el procedimiento de formato.
¡Copiado!
1/*--------------------------------------------------------------------------------------*
2 Copyright 2017, Rho, Inc. All rights reserved.
3 
4 PROGRAM: list2format
5 
6 PURPOSE: Create a numeric format based on a list of values.
7 
8 INPUT: fmtname= format name
9 list= list of values
10 
11 DETAILS:
12 - list should be specified as comma-separated values enclosed in parentheses.
13 e.g., list=(ALT,BILI,CREAT).
14
15 PROGRAM HISTORY:
16 DATE PROGRAMMER DESCRIPTION
17 --------- --------------- ------------------------------------------------------
18 2017-12-15 Shane Rosanbalm Create.
19 
20*--------------------------------------------------------------------------------------*/
21 
22%macro list2format
23 (fmtname=
24 ,list=
25 );
26 
27 %*--- get first item ---;
28 %local i item;
29 %let i = 1;
30 %let item = %qscan(%nrbquote(&list),&i,%str((),));
31
32 %*--- continue IF more items ---;
33 %DO %while(&item ne );
34 %local list_&i;
35 %let list_&i = &item;
36 %let i = %eval(&i+1);
37 %let item = %qscan(%nrbquote(&list),&i,%str((),));
38 %END;
39
40 %*--- number of items found ---;
41 %local list_n;
42 %let list_n = %eval(&i-1);
43
44 %*--- make a FORMAT ---;
45 PROC FORMAT;
46 value &fmtname
47 %DO i = 1 %to &list_n;
48 &i = "%sysfunc(strip(&&list_&i))"
49 %END;
50 ;
51 RUN;
52 
53%mend list2format;
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 2017, Rho, Inc. All rights reserved.


Documentación relacionada

Aucune documentation spécifique pour cette catégorie.