Automatización del borrado de tablas


En ocasiones queremos automatizar un proceso que genera tablas diaria o semanalmente y rápidamente se acumulan un montón de datos en nuestra librería de salida. Necesitamos gestionar esto, pero no podemos estar pendientes de ello. Utilizaremos entonces una macro que nos permite desatender el borrado con unas especificaciones y nos libere de ese trabajo.

Listado de tablas en la librería SASHELP

La macro está mínimamente parametrizada y utiliza el diccionario de tablas de SAS y el proc datasets. Tal como está definida realiza un borrado de la WORK de tablas de más de 3 meses de antigüedad. Evidentemente, no está pensada para usarla contra la WORK.

%macro borrado_historico;
    %let libreria = WORK;
    %let tablas = ;
    data _null_;
        call symput('fecha_limite',put(intnx('month',date(),-3,'S'),date9.));
    run;

    proc sql noprint; 
        select memname into :tablas separated by ' '
        from DICTIONARY.TABLES 
        where libname= "&libreria" and
              memname ne '_PRODSAVAIL' and
              datepart(crdate) < "&fecha_limite"d;
    quit;

    proc datasets lib=&libreria noprint;
        delete _PRODSAVAIL &tablas;
    run;
%mend;
%borrado_historico;

Primero realiza una consulta al diccionario de tablas (DICTIONARY.TABLES) por la fecha de creación de la tabla crdate (también se puede hacer por la fecha de modificación de la tabla: modate) y listo las tablas que serán borradas separadas por espacios para que puedan ser utilizadas directamente por el próximo paso. Añadir al filtro una condición substr(memname,1,9)='CAMPANAS_' nos permitirá borrar solo las tablas de determinado tipo, por supuesto.

En el proc datasets definimos la librería que queremos atacar y le pasamos al statement delete el listado de variables que previamente hemos calculado. Aquí he usado un pequeño truco para evitar que se produzca un error en el caso de que el listado de tablas esté vacío: y es que en el proc sql había excluido la tabla _PRODSAVAIL que añado ahora aquí para que siempre tenga algo que borrar.

¿Qué es la tabla _PRODSAVAIL? Pues contiene un listado de los módulos licenciados en SAS Enterprise Guide para que la herramienta lo pueda consultar rápidamente. Se genera automáticamente con cada sesión que se genera y no produce ningún efecto adverso en el Guide su borrado.