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!
/*--------------------------------------------------------------------------------------*
Copyright 2017, Rho, Inc. All rights reserved.
PROGRAM: list2format
PURPOSE: Create a numeric format based on a list of values.
INPUT: fmtname= format name
list= list of values
DETAILS:
- list should be specified as comma-separated values enclosed in parentheses.
e.g., list=(ALT,BILI,CREAT).
PROGRAM HISTORY:
DATE PROGRAMMER DESCRIPTION
--------- --------------- ------------------------------------------------------
2017-12-15 Shane Rosanbalm Create.
*--------------------------------------------------------------------------------------*/
%macro list2format
(fmtname=
,list=
);
%*--- get first item ---;
%local i item;
%let i = 1;
%let item = %qscan(%nrbquote(&list),&i,%str((),));
%*--- continue if more items ---;
%do %while(&item ne );
%local list_&i;
%let list_&i = &item;
%let i = %eval(&i+1);
%let item = %qscan(%nrbquote(&list),&i,%str((),));
%end;
%*--- number of items found ---;
%local list_n;
%let list_n = %eval(&i-1);
%*--- make a format ---;
proc format;
value &fmtname
%do i = 1 %to &list_n;
&i = "%sysfunc(strip(&&list_&i))"
%end;
;
run;
%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.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.