Publicado el :
Macro MIXTO

Eliminación de macros del catálogo work.sasmacr por patrón SQL

Este código también está disponible en: Deutsch English Français
En espera de validación
Attention : Este código requiere privilegios de administrador.
Esta macro, `delmac`, está diseñada para eliminar macros SAS© existentes del catálogo `work.sasmacr` en función de un patrón SQL 'like' proporcionado por el usuario. Primero, convierte el patrón 'like' a mayúsculas y reemplaza los dos puntos (':') por signos de porcentaje ('%') para la compatibilidad con los comodines SQL. Luego, lista todas las macros del catálogo `work.sasmacr` en un conjunto de datos temporal llamado `_listmac`. Un paso `PROC SQL` filtra este conjunto de datos para identificar las macros que coinciden con el patrón y almacena sus nombres en una variable macro `delmac`. El conjunto de datos temporal `_listmac` se elimina posteriormente. Finalmente, si se han identificado macros, `PROC CATALOG` se utiliza para eliminarlas de `work.sasmacr`. La macro incluye un manejo de errores básico para un parámetro 'like' vacío y restaura la opción `notes` a su estado original. El patrón 'like' admite los comodines SQL '_' (cualquier carácter) y '%' (cualquier cadena), con '\' utilizado para escapar '_'.
Análisis de datos

Type : MIXTO


El código opera sobre el catálogo `work.sasmacr` de la sesión SAS actual, que contiene las macros compiladas. Crea un conjunto de datos temporal `_listmac` en la biblioteca `WORK` para almacenar la lista de macros antes de filtrarlas con `PROC SQL`. No se leen ni se requieren datos externos para su funcionamiento.

1 Bloque de código
MACRO DEFINITION
Explicación :
Este bloque define la macro `delmac` con un parámetro `like`. Inicializa variables locales, captura el estado actual de la opción `notes` de SAS y la desactiva durante la ejecución de la macro. También realiza una validación del parámetro `like` y lo preprocesa para la búsqueda SQL, convirtiéndolo a mayúsculas y reemplazando los ':' por '%'.
¡Copiado!
1%put MACRO CALLED: delmac v1.0;
2 
3%macro delmac(like);
4 %local delmac err savopts;
5 
6 %let err=ERR%str(OR);
7 %let savopts=%sysfunc(getoption(notes));
8 
9 options nonotes;
10 
11 %IF not %LENGTH(&like) %THEN %goto exit;
12 
13 %let like=%upcase(%sysfunc(translate(&like,%,:)));
2 Bloque de código
PROC CATALOG Data
¡Copiado!
1 
2PROC CATALOG catalog=work.sasmacr entrytype=macro;
3contents out=_listmac;
4 
5QUIT;
6 
3 Bloque de código
PROC SQL
Explicación :
Este bloque `PROC SQL` selecciona los nombres de las macros del conjunto de datos temporal `_listmac` que coinciden con el patrón proporcionado por el parámetro `like`. Los nombres de las macros encontradas se concatenan en la variable macro `delmac`, separados por espacios. La opción `escape '\'` permite usar el carácter '\' para escapar los comodines SQL ('_').
¡Copiado!
1 PROC SQL noprint;
2 select name into :delmac separated BY " " from _listmac
3 where name like "&like" escape '\';
4 QUIT;
4 Bloque de código
PROC DATASETS
Explicación :
Este bloque utiliza `PROC DATASETS` para eliminar el conjunto de datos temporal `_listmac`, que ya no es necesario después de la extracción de los nombres de las macros.
¡Copiado!
1 
2PROC DATASETS nolist;
3delete _listmac;
4 
5QUIT;
6 
5 Bloque de código
PROC CATALOG
Explicación :
Este bloque condicional verifica si la variable macro `delmac` contiene nombres de macros (es decir, si se encontraron macros que coinciden con el patrón). Si es así, se utiliza `PROC CATALOG` para eliminar esas macros del catálogo `work.sasmacr`.
¡Copiado!
1 %IF %LENGTH(&delmac) %THEN %DO;
2 PROC CATALOG catalog=work.sasmacr entrytype=macro;
3 delete &delmac;
4 QUIT;
5 %END;
6 Bloque de código
MACRO LOGIC
Explicación :
Este bloque maneja la lógica de salida de la macro. Incluye una etiqueta `%exit:` para el manejo de errores (si no se proporciona ningún patrón 'like') y una etiqueta `%skip:` para el final normal de la ejecución. Finalmente, restaura la opción SAS `notes` a su valor original, asegurando que la macro no afecte de forma duradera el entorno SAS.
¡Copiado!
1 %goto skip;
2 %exit: %put &err: (delmac) No "like" string supplied;
3 %skip:
4 
5 options &savopts;
6 
7%mend delmac;
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 : This is public domain software. No guarantee as to suitability or accuracy is given or implied. User uses this code entirely at their own risk.