Informe dataset

Tengo por ahí este programa SAS interesante. Es una macro que realiza un pequeño informe sobre un dataset. Nos ofrece la librería, las variables y el tipo, longitud, posición y formato de éstas y, por último, el número de observaciones. Si el dataset que deseamos explorar es una tabla Oracle, Informix o DB2, hace un COUNT(*) para determinar el número de observaciones.

Este breve resumen lo vuelca en una tabla temporal SAS que nos llevaremos a Excel. Con ésto, los parámetros que recibe la macro son el dataset sobre el que realizamos el resumen y la ubicación del Excel de salida. Aquí os pongo el código:

* MACRO QUE EXPLORA UN CONJUNTO DE DATOS Y CREA UN EXCEL EN UN DIRECTORIO;
%macro explora_datos(datos, salida);
    * SEPARAMOS LA LIBRERIA DE LA TABLA;
    data _null_;
        a1 = upcase(scan("&datos.", 1, '.'));
        a2 = upcase(scan("&datos.", 2, '.'));
        if a2 = " " then do;
            a2 = a1;
            a1 = "WORK";
        end;
        call symput('libreria', compress(a1));
        call symput('tabla', compress(a2));
    run;

    * VOLCAMOS LOS CONTENIDOS DE LA TABLA EN OTRA AUXILIAR;
    proc datasets lib=&libreria. nolist nodetails;
        contents data=&tabla. 
                 out=work.AAA&tabla. (keep=LIBNAME MEMNAME NAME TYPE LENGTH VARNUM INFORMAT NPOS NOBS) 
                 noprint;
    run;
    quit;

    * SI ES UNA LIBRERÍA DINÁMICA, PARA SABER EL NUMERO DE OBSERVACIONES CONTAMOS;
    data _null_;
        set work.AAA&tabla. (obs=1);
        call symput('ejecuta', compress(put(nobs, 12.)));
    run;

    %if %superq(ejecuta) = %str(.) or %superq(ejecuta) = %str() %then %do;
        proc sql noprint;
            select count(*) into :nob from &datos.;
        quit;
        data work.AAA&tabla.;
            set work.AAA&tabla.;
            nobs = &nob.;
        run;
    %end;

    * CREAMOS UN EXCEL EN UNA UBICACIÓN DETERMINADA CON EL NOMBRE DE LA TABLA;
    title;
    filename out_xls "&salida.\&tabla..xls";
    ods noresults;
    ods listing close;
    ods html file=out_xls rs=none style=minimal;
    
    proc print data=work.AAA&tabla. noobs;
    run;
    
    ods html close;
    ods results;
    ods listing;
    
    proc delete data=work.AAA&tabla.; 
    run;
%mend explora_datos;

* EJEMPLO DE USO;
/* %explora_datos(work.prueba, C:\temp); */

Si alguien tiene SAS 8 o una versión más antigua, que me indique si funciona. Con este programa documenté un datamart en una tarde; además, me sirvió para construir los metadatos y las tablas de dimensiones de ese datamart. Hay una versión más sofisticada que realiza el informe sobre todas las tablas de una librería.

Como siempre, si tenéis dudas, sugerencias o deseáis que ayude a vuestro equipo: rvaquerizo@analisisydecision.es. Saludos.