Publicado el :
Macro SASHELP

Verificación de existencia de variable macro con ámbito

Este código también está disponible en: Deutsch English Français
Esta macro, llamada `mvartest`, extiende la funcionalidad de la función macro `%SYMEXIST()` de SAS©. Permite determinar si una variable macro existe, no solo por su nombre, sino también dentro de un ámbito macro específico. Los parámetros de entrada son `mvar` (el nombre de la variable macro a verificar) y `scope` (el ámbito macro opcional en el que realizar la búsqueda). La macro construye dinámicamente una cláusula WHERE para consultar la vista del sistema `sashelp.vmacro`. Retorna el valor `1` si la variable macro es encontrada en el ámbito especificado (o globalmente si no se proporciona ningún ámbito), y `0` en caso contrario.
Análisis de datos

Type : SASHELP


La macro consulta exclusivamente la vista del sistema `sashelp.vmacro`, que contiene metadatos sobre todas las variables macros existentes en la sesión SAS. No se utiliza ni se crea ninguna otra fuente de datos externa.

1 Bloque de código
Lógica macro (construcción de cláusula WHERE)
Explicación :
Este primer bloque inicializa tres variables macro locales: `dsid` (para el identificador del conjunto de datos), `rc` (para el código de retorno) y `where` (para la cláusula de filtro). Luego construye la cláusula `WHERE` que se utilizará para consultar la vista `sashelp.vmacro`. Si se proporciona el parámetro `scope`, la búsqueda se limita al ámbito especificado, convertido a mayúsculas. De lo contrario, la búsqueda excluye el ámbito de la macro actual (`&sysmacroname`). Finalmente, la cláusula `WHERE` se completa para incluir el nombre de la variable macro a buscar (`&mvar`), también convertido a mayúsculas.
¡Copiado!
1%local dsid rc where;
2 
3%IF %LENGTH(&scope) %THEN %let where=scope=%upcase("&scope");
4%ELSE %let where=scope ^= "&sysmacroname" ;
5%let where=name=%upcase("&mvar") and &where;
2 Bloque de código
Funcionalidades macro de acceso a datos
Explicación :
Este segundo bloque ejecuta la lógica de verificación. Utiliza la función `%sysfunc(open())` para abrir la vista del sistema `sashelp.vmacro` aplicando la cláusula `WHERE` definida previamente. Si la apertura del conjunto de datos es exitosa (es decir, `&dsid` no es nulo), la macro intenta recuperar un registro usando `%sysfunc(fetch(&dsid))`. Si se encuentra un registro (indicado por un código de retorno diferente de -1), esto significa que la variable macro existe en el ámbito buscado. El conjunto de datos se cierra luego con `%sysfunc(close(&dsid))`. La macro devuelve `1` si se encuentra la variable macro y `0` en caso contrario.
¡Copiado!
1%let dsid = %sysfunc(open(sashelp.vmacro(where=(&where))));
2%IF (&dsid) %THEN %DO;
3 %eval(%sysfunc(fetch(&dsid)) ^= -1)
4 %let rc = %sysfunc(close(&dsid));
5%END;
6%ELSE 0;
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.