Publicado el :
Macro CREATION_INTERNE | SASHELP

Eliminación de variables macro y macros

Este código también está disponible en: Deutsch English Français
Attention : Este código requiere privilegios de administrador.
Esta macro, llamada `bdeleteMacArray`, está diseñada para gestionar la eliminación de elementos SAS©. Toma una lista de prefijos de variables macro (`arrs`) y los utiliza para eliminar las variables macro indexadas (`arr.J`), así como las variables de límites (`LBOUND`, `HBOUND`, `N`) asociadas a cada 'arreglo' de variables macro. Opcionalmente, si el parámetro `macarray` se establece en 'Y' o 'YES', la macro extiende su funcionalidad para buscar y eliminar las macros compiladas correspondientes en el catálogo WORK, identificadas a través de la vista `dictionary.catalogs` y eliminadas mediante `PROC CATALOG`. Este proceso implica tareas de administración del sistema SAS©.
Análisis de datos

Type : CREATION_INTERNE | SASHELP


La macro opera principalmente sobre nombres de variables macro pasados como parámetro. Para la eliminación opcional de macros compiladas, consulta la vista del sistema `dictionary.catalogs` (parte de SASHELP) y manipula los catálogos SAS del sistema.

1 Bloque de código
LANGAGE MACRO SAS
Explicación :
Este bloque utiliza las funciones del lenguaje macro para iterar sobre una lista de nombres de variables (consideradas como bases de nombres para arreglos de variables macro). Para cada nombre, elimina todas las variables macro indexadas (por ejemplo, `miArreglo1`, `miArreglo2`), así como las variables especiales `LBOUND`, `HBOUND` y `N` que definen los límites y el tamaño del arreglo de variables macro. La opción `NOWARN` evita la visualización de advertencias si una variable macro no existe.
¡Copiado!
1%local I J rc;
2%DO I = 1 %to %sysfunc(countw(&arrs.));
3%let arr = %scan(&arrs., &I., %str( ));
4 %DO J = &&&arr.LBOUND %to &&&arr.HBOUND;
5 /*%put *&arr.&J.*;*/
6 %symdel &arr.&J. / NOWARN;
7 %END;
8 %symdel &arr.LBOUND &arr.HBOUND &arr.N / NOWARN;
9%END;
2 Bloque de código
PROC SQL, DATA STEP, PROC CATALOG, PROC DELETE
Explicación :
Este bloque se ejecuta si el parámetro `macarray` indica que se deben eliminar macros. Utiliza `%sysfunc(dosubl(...))` para ejecutar un bloque de código SAS en modo de envío. Este bloque:
1. Utiliza `PROC SQL` para consultar la vista `dictionary.catalogs` con el fin de identificar las macros compiladas (`objtype = 'MACRO'`) en la biblioteca `WORK` cuyos nombres coinciden con los proporcionados en `arrs`. Los resultados se almacenan en una tabla temporal.
2. Un `DATA _NULL_` paso a paso con `CALL EXECUTE` genera dinámicamente instrucciones `PROC CATALOG` para cada macro identificada. `PROC CATALOG` se utiliza luego con la opción `force` para eliminar las entradas de macro correspondientes del catálogo WORK.
3. Finalmente, `PROC DELETE` elimina la tabla temporal creada por `PROC SQL`.
¡Copiado!
1%IF %qupcase(&macarray.) in (Y YES) %THEN
2 %DO;
3 %let rc = %sysfunc(dosubl(
4 /*+++++++++++++++++++++++++++++++++++++++++++++*/
5 options nonotes nosource %str(;)
6 PROC SQL noprint %str(;)
7 create TABLE _%sysfunc(datetime(), hex16.)_ as
8 select memname %str(,) objname
9 from dictionary.catalogs
10 where
11 objname in (%upcase(
12 %str(%")%qsysfunc(tranwrd(&arrs., %str( ), %str(%,%"))))%str(%")
13 ))
14 and objtype = 'MACRO'
15 and libname = 'WORK'
16 order by memname %str(,) objname
17 %str(;)
18 quit %str(;)
19 data _null_ %str(;)
20 do until(last.memname) %str(;)
21 set _last_ %str(;)
22 by memname %str(;)
23 
24 if first.memname then
25 call execute('PROC CATALOG cat = work.'
26 !! strip(memname)
27 !! ' et = macro force;') %str(;)
28 call execute('delete '
29 !! strip(objname)
30 !! '; RUN;') %str(;)
31 end %str(;)
32 call execute('QUIT;') %str(;)
33 RUN %str(;)
34 PROC DELETE DATA = _last_ %str(;)
35 RUN %str(;)
36 /*++++++++++++++++++++++++++++++++++++++++++++++++*/
37 ));
38 %END;
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.