Macro para listar las variables de un dataset

Este código también está disponible en: Deutsch English Français
Nivel de dificultad
Principiante
Publicado el :
La macro '%getVarList' está diseñada para extraer los nombres de todas las variables de un dataset SAS© dado. Toma dos parámetros: 'libds' (el nombre del dataset de dos niveles, con 'sashelp.class' como valor predeterminado) y 'dlm' (el delimitador a usar para separar los nombres de variables en la cadena de salida, siendo el espacio el delimitador predeterminado). La macro utiliza las funciones macro '%sysfunc(open)', '%sysfunc(attrn)' y '%sysfunc(varname)' para abrir el dataset, determinar el número de variables y recuperar el nombre de cada variable. Luego concatena estos nombres de variables en una sola cadena, usando el delimitador especificado. En caso de fallo en la apertura del dataset, se muestra un mensaje de error. El resultado es la cadena de caracteres que contiene la lista de variables.
Análisis de datos

Type : SASHELP


La macro utiliza el dataset interno SASHELP.CLASS por defecto para demostrar su funcionalidad. Sin embargo, está diseñada para funcionar con cualquier dataset SAS válido proporcionado a través del parámetro 'libds', ya sea interno o externo. No crea ni modifica datos, sino que extrae metadatos (nombres de variables).

1 Bloque de código
MACRO %getVarList
Explicación :
Este bloque define la macro '%getVarList'. Declara variables macro locales. La función '%sysfunc(open(&libds))' intenta abrir el dataset especificado y devuelve un identificador de dataset (dsid) o 0 en caso de fallo. Si la apertura es exitosa, '%sysfunc(attrn(&dsid,NVARS))' recupera el número de variables. Un bucle recorre luego todas las variables usando '%sysfunc(varname(&dsid,&x))' para obtener su nombre. Los nombres se concatenan en la variable macro 'outvar' usando el delimitador 'dlm'. Finalmente, el dataset se cierra con '%sysfunc(close(&dsid))' y se devuelve la cadena resultante 'outvar'.
¡Copiado!
1/***
2 Macro to get a list of variables directly from a dataset.
3 WAY faster than dictionary tables or sas views, and can
4 also be called in macro logic (is pure macro).
5 Default is to have space delimited variable names in &MyGlobalVar.
6
7 @html/SAS Help Center_ accessPersonalCaslibs Action.html Help Center_ isAuthorized Action.html Allan Bowe @code_sas_json/hsdua2304@gmail.com_SAS_Assignment_1.json @code_sas/_version.sas 9.2 @code_sas_json/hsdua2304@gmail.com_SAS_Assignment_1.json @code_sas/assert_i_config_usage_configtest.sas
8 %put %getVarList(libds=sashelp.class);
9 @code_sas_json/hsdua2304@gmail.com_SAS_Assignment_1.json
10 
11 #macrofunction
12 
13***/
14 
15%macro getVarList(libds=sashelp.class /* two level name */
16 ,dlm=%str( ) /* provide delimeter (eg comma or space) to separate vars */
17 );
18 /* declare local vars */
19 %local outvar dsid nvars x rc dlm;
20 
21 /* open dataset in macro */
22 %let dsid=%sysfunc(open(&libds));
23 
24 %IF &dsid %THEN %DO;
25 %let nvars=%sysfunc(attrn(&dsid,NVARS));
26 %IF &nvars>0 %THEN %DO;
27 /* add first dataset variable to global macro variable */
28 %let outvar=%sysfunc(varname(&dsid,1));
29 /* add remaining variables with supplied delimeter */
30 %DO x=2 %to &nvars;
31 %let outvar=&outvar.&dlm%sysfunc(varname(&dsid,&x));
32 %END;
33 %END;
34 %let rc=%sysfunc(close(&dsid));
35 %END;
36 %ELSE %DO;
37 %put unable to open &libds (rc=&dsid);
38 %let rc=%sysfunc(close(&dsid));
39 %END;
40 /* return the value */
41 &outvar
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 (c) 2001-2006 Rodney Sparapani (del archivo _version.sas); Copyright 2010-2023 HMS Analytical Software GmbH (del archivo assert_i_config_usage_configtest.sas). Los comentarios en la macro analizada también hacen referencia a 'Allan Bowe'.


Documentación relacionada

Aucune documentation spécifique pour cette catégorie.