Publicado el :

Macro para recuperar la etiqueta de una variable

Este código también está disponible en: Deutsch English Français
En espera de validación
La macro `%getVarLabel` toma como entrada el nombre de un conjunto de datos (`libds`, por defecto `sashelp.class`) y el nombre de una variable (`var`). Utiliza las funciones del sistema SAS© para abrir el conjunto de datos, verificar la existencia de la variable y extraer su etiqueta. Si el conjunto de datos no se puede abrir o la variable no existe, se emite un mensaje de error o una nota en el log de SAS©. La macro es compatible con SAS© Viya 4 y está diseñada para ser reutilizable.
Análisis de datos

Type : MIXTE


El parámetro `libds` de la macro utiliza por defecto `sashelp.class`, que es un conjunto de datos interno de SAS. Los ejemplos de uso incluidos en los comentarios de la macro también crean un conjunto de datos temporal (`data test;`) internamente a través de un paso DATA, demostrando el uso con datos generados en el script.

1 Bloque de código
MACRO
Explicación :
Este bloque define la macro `%getVarLabel`. Abre un conjunto de datos especificado por `libds` (o `sashelp.class` por defecto) utilizando `%sysfunc(open)`. Luego determina el número de la variable `var` con `%sysfunc(varnum)` y recupera su etiqueta con `%sysfunc(varlabel)`. Se generan mensajes de error o notas si el conjunto de datos no se abre o si la variable no se encuentra. Finalmente, el conjunto de datos se cierra y se devuelve la etiqueta de la variable.
¡Copiado!
1%macro getVarLabel(libds=sashelp.class /* two level name */
2 , var= /* variable name for which to return the label */
3 );
4 %local dsid vnum vlabel rc;
5 /* Open dataset */
6 %let dsid = %sysfunc(open(&libds));
7 %IF &dsid > 0 %THEN %DO;
8 /* Get variable number */
9 %let vnum = %sysfunc(varnum(&dsid, &var));
10 %IF(&vnum. > 0) %THEN
11 /* Variable exists, so get label */
12 %let vlabel = %sysfunc(varlabel(&dsid, &vnum));
13 %ELSE %DO;
14 %put NOTE: Variable &var does not exist in &libds;
15 %let vlabel = %str();
16 %END;
17 %END;
18 %ELSE %put dataset &libds not opened! (rc=&dsid);
19 
20 /* Close dataset */
21 %let rc = %sysfunc(close(&dsid));
22 /* Return variable label */
23 &vlabel
24%mend;
2 Bloque de código
DATA STEP / MACRO CALLS Data
Explicación :
Este bloque proporciona un ejemplo de uso de la macro `%getVarLabel`. Comienza creando un conjunto de datos temporal llamado `test` con tres variables (`str`, `num`, `x`) y sus etiquetas y formatos asociados. Luego, llama a la macro `%getVarLabel` cuatro veces con varias combinaciones de conjuntos de datos y variables, incluyendo casos donde la variable existe y donde falta, para demostrar la funcionalidad de la macro. Los resultados de las llamadas a la macro se muestran en el log de SAS a través de la función `%put`.
¡Copiado!
1DATA test;
2 label str='My String' num='My Number' ;
3 FORMAT str $1. num datetime19. x 8.;
4 stop;
5RUN;
6%put %getVarLabel(ds=test, var=str);
7%put %getVarLabel(ds=work.test, var=num);
8%put %getVarLabel(ds=test, var=x);
9%put %getVarLabel(ds=test, var=renegade);
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) 2016 Scott Bass (sas_l_739 @yahoo.com.au). Este código está bajo la licencia Unlicense (http://unlicense.org/UNLICENSE), como se indica en el archivo @code_sas/@TEMPLATE.sas referenciado.