Publicado el :
Utilidad SASHELP | EXTERNO

Lista de variables de un conjunto de datos

Este código también está disponible en: Deutsch English Français Español
La macro `%mf_getvarlist` está diseñada para extraer los nombres de las variables de un conjunto de datos SAS© especificado y presentarlos de forma personalizable. Acepta un nombre de conjunto de datos (`libds`) y permite definir un `dlm` (delimitador) para separar las variables, una opción `quote` para encerrar los nombres de las variables entre comillas (simples o dobles) y un `typefilter` para incluir solo las variables de tipo 'Numérico' ('N'), 'Carácter' ('C') o 'Todas' ('A'). La lógica interna utiliza las funciones macro `SYSFUNC` (`open`, `attrn`, `vartype`, `varname`, `close`) para acceder a los metadatos del conjunto de datos. En caso de que falle la apertura del conjunto de datos, se escriben mensajes informativos en el log de SAS©. La salida es una cadena de caracteres que contiene la lista de variables.
Análisis de datos

Type : SASHELP | EXTERNO


La macro no crea datos. Lee los metadatos de un conjunto de datos SAS existente, cuyo nombre se pasa como parámetro (`libds`). Este conjunto de datos puede ser una tabla interna (como `sashelp.class` en los ejemplos) o cualquier otro conjunto de datos de usuario accesible. La macro no accede directamente a fuentes de datos externas, sino que opera sobre conjuntos de datos ya cargados o accesibles por SAS.

1 Bloque de código
DEFINICIÓN MACRO
Explicación :
Declaración de la macro `%mf_getvarlist` con sus parámetros de entrada para el conjunto de datos, el delimitador, las opciones de comillas y el filtro de tipo. Las variables locales utilizadas por la macro también se definen aquí para evitar interferencias con otras macro-variables globales.
¡Copiado!
1%macro mf_getvarlist(libds
2 ,dlm=%str( )
3 ,quote=no
4 ,typefilter=A
5)/*/STORE SOURCE*/;
6 /* declare local vars */
7 %local outvar dsid nvars x rc dlm q var vtype;
2 Bloque de código
LÓGICA MACRO (FORMATO DE COMILLAS)
¡Copiado!
1/* credit Rowland Hale - byte34 is double quote, 39 is single quote */
2%IF %upcase("e)=DOUBLE %THEN %let q=%qsysfunc(byte(34));
3%ELSE %IF %upcase("e)=SINGLE %THEN %let q=%qsysfunc(byte(39));
4 
3 Bloque de código
LÓGICA MACRO (APERTURA DEL CONJUNTO DE DATOS)
¡Copiado!
1/* open dataset in macro */
2%let dsid=%sysfunc(open(&libds));
3 
4 Bloque de código
LÓGICA MACRO (PROCESAMIENTO DE VARIABLES)
¡Copiado!
1 %IF &dsid %THEN %DO;
2 %let nvars=%sysfunc(attrn(&dsid,NVARS));
3 %IF &nvars>0 %THEN %DO;
4 /* add variables with supplied delimeter */
5 %DO x=1 %to &nvars;
6 /* get variable type */
7 %let vtype=%sysfunc(vartype(&dsid,&x));
8 %IF &vtype=&typefilter or &typefilter=A %THEN %DO;
9 %let var=&q.%sysfunc(varname(&dsid,&x))&q.;
10 %IF &var=&q&q %THEN %DO;
11 %put &sysmacroname: Empty column found in &libds!;
12 %let var=&q. &q.;
13 %END;
14 %IF %quote(&outvar)=%quote() %THEN %let outvar=&var;
15 %ELSE %let outvar=&outvar.&dlm.&var.;
16 %END;
17 %END;
18 %END;
19 %let rc=%sysfunc(close(&dsid));
20 %END;
5 Bloque de código
GESTIÓN DE ERRORES MACRO
¡Copiado!
1 %ELSE %DO;
2 %put &sysmacroname: Unable to open &libds (rc=&dsid);
3 %put &sysmacroname: SYSMSG= %sysfunc(sysmsg());
4 %let rc=%sysfunc(close(&dsid));
5 %END;
6 Bloque de código
RETORNO DE MACRO
¡Copiado!
1 %DO;%unquote(&outvar)%END;
2%mend mf_getvarlist;
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 : Mencionado en los comentarios asociados: Allan Bowe. El archivo referenciado _version.sas indica 'Copyright (c) 2001-2006 Rodney Sparapani'.