La macro interactúa principalmente con el servidor de metadatos SAS para gestionar los Stored Processes. No consume datos externos ni conjuntos de datos SASHELP directamente para su funcionamiento principal de eliminación. Los datos procesados son información de metadatos generada y gestionada por el propio sistema SAS.
1 Bloque de código
DATA STEP (metadata_pathobj) y Macro IF
Explicación : Este bloque inicializa la macro `mm_deletestp` y realiza una primera etapa de verificación. Utiliza un paso `DATA _NULL_` con la función `metadata_pathobj` para consultar el servidor de metadatos. El objetivo es determinar si un 'StoredProcess' existe en la ruta especificada por el parámetro `&target`. El tipo (`type`) y la URI (`uri`) del objeto encontrado se almacenan en variables macro. Si el objeto no se identifica como un 'ClassifierMap' (tipo interno para los Stored Processes), se emite una nota y la macro finaliza, indicando la ausencia del Stored Process.
¡Copiado!
%macro mm_deletestp(
target=
)/*/STORE SOURCE*/;
/**
* Check STP does exist
*/
%local cmtype;
data _null_;
length type uri $256;
rc=metadata_pathobj("","&target",'StoredProcess',type,uri);
call symputx('cmtype',type,'l');
call symputx('stpuri',uri,'l');
run;
%if &cmtype ne ClassifierMap %then %do;
%put NOTE: No Stored Process found at ⌖
%return;
%end;
Explicación : Este bloque prepara el terreno para la eliminación asignando dos filerefs temporales (`__in` y `__out`) para la entrada y salida del procedimiento `PROC METADATA`. Luego, un paso `DATA _NULL_` genera una cadena XML formateada directamente en el archivo `__in`. Esta cadena representa una solicitud de eliminación de metadatos que apunta al objeto 'ClassifierMap' cuyo ID está contenido en la variable macro `&stpuri`, preparando así la instrucción para el servidor de metadatos.
¡Copiado!
filename __in temp lrecl=10000;
filename __out temp lrecl=10000;
data _null_ ;
file __in ;
put "<DeleteMetadata><Metadata><ClassifierMap Id='&stpuri'/>";
put "</Metadata><NS>SAS</NS><Flags>268436480</Flags><Options/>";
put "</DeleteMetadata>";
run ;
1
filename __in temp lrecl=10000;
2
filename __out temp lrecl=10000;
3
DATA _null_ ;
4
file __in ;
5
put "<DeleteMetadata><Metadata><ClassifierMap Id='&stpuri'/>";
6
put "</Metadata><NS>SAS</NS><Flags>268436480</Flags><Options/>";
7
put "</DeleteMetadata>";
8
RUN ;
3 Bloque de código
PROC METADATA
Explicación : El procedimiento `PROC METADATA` se ejecuta para enviar la solicitud XML generada previamente (contenida en `__in`) al servidor de metadatos SAS. La opción `verbose` asegura que se registre la máxima información sobre la ejecución y el resultado de la solicitud, con la salida redirigida al archivo temporal `__out`.
¡Copiado!
proc metadata in=__in out=__out verbose;run;
1
PROC METADATA in=__in out=__out verbose;RUN;
4 Bloque de código
DATA STEP (Lectura de archivo)
Explicación : Este bloque es un simple paso `DATA _NULL_` que tiene la función de leer y mostrar el contenido del archivo temporal `__out` en el log de SAS. Esto permite visualizar la respuesta detallada del servidor de metadatos después del intento de eliminación.
¡Copiado!
/* list the result */
data _null_;infile __out; input; list; run;
1
/* list the result */
2
DATA _null_;
3
INFILE __out;
4
INPUT;
5
list;
6
7
RUN;
8
5 Bloque de código
SAS Global Statement
Explicación : Estas declaraciones `filename CLEAR` son instrucciones esenciales para liberar correctamente los filerefs temporales `__in` y `__out` que se han utilizado. Es una buena práctica para evitar la retención innecesaria de recursos y posibles conflictos en ejecuciones SAS posteriores.
¡Copiado!
filename __in clear;
filename __out clear;
1
filename __in clear;
2
filename __out clear;
6 Bloque de código
DATA STEP (metadata_pathobj) y Macro IF
Explicación : Este último bloque realiza una verificación crucial después del intento de eliminación. Vuelve a utilizar `metadata_pathobj` para asegurarse de que el Stored Process (`&target`) haya sido efectivamente retirado de los metadatos. Si el objeto todavía se encuentra y se identifica como un 'ClassifierMap', se genera un mensaje de error en el log, la variable de sistema `syscc` se establece en 4 (indicando un error), y la macro finaliza para señalar el fallo de la eliminación. El `%mend` marca el final de la macro `mm_deletestp`.
¡Copiado!
/**
* Check deletion
*/
%local isgone;
data _null_;
length type uri $256;
call missing (of _all_);
rc=metadata_pathobj("","&target",'Note',type,uri);
call symputx('isgone',type,'l');
run;
%if &isgone = ClassifierMap %then %do;
%put %str(ERR)OR: STP not deleted from ⌖
%let syscc=4;
%return;
%end;
%mend mm_deletestp;
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. Este código se distribuye bajo los términos de la Licencia Pública General GNU (GPL) versión 2 o posterior.
« La macro mm_deletestp representa una técnica avanzada y profesional para la administración de entornos SAS 9. Al utilizar PROC METADATA con instrucciones XML en lugar de eliminaciones manuales en la consola, se garantiza que la limpieza del entorno sea automatizada, repetible y auditable. La elección del tipo de objeto ClassifierMap es técnicamente precisa, ya que es la clase de metadatos que define la existencia de un Proceso Almacenado (Stored Process) dentro de la Open Metadata Architecture (OMA).
Recomendaciones estratégicas y puntos clave
El papel crítico de los Flags: En la solicitud XML, el valor <Flags>268436480</Flags> es vital. Esta máscara de bits indica al servidor cómo manejar las asociaciones. Un error común en la gestión de metadatos es dejar "objetos huérfanos" (como definiciones de parámetros o notas de metadatos). El uso de los flags correctos asegura una eliminación limpia que mantiene la salud a largo plazo del repositorio de metadatos.
Programación defensiva y control de errores: La macro implementa una doble verificación robusta: comprueba la existencia antes de la ejecución y confirma la eliminación después. Actualizar syscc=4 en caso de fallo es una práctica esencial para entornos de producción, ya que alerta a los planificadores de tareas (como LSF o SAS Job Execution) de que ocurrió una anomalía, incluso si la sesión de SAS no falló técnicamente.
Eliminación lógica frente a física: Es importante tener en cuenta que esta macro elimina la definición en los metadatos. Si su Stored Process apunta a un archivo físico externo (un archivo .sas en el servidor), ese archivo permanecerá en el disco. Para una limpieza integral, se recomienda combinar esta macro con el comando FDELETE para eliminar el código fuente físico. »
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.