Truco SAS. Tablas de una librería en una macro variable

24 Ene

Me plantean una duda, como crear un conjunto de datos con las tablas de una librería en sas y posteriormente generar una macro variable con ellos, esta es una entrada análoga a otra del blog pero sirve para recordar como funciona el ODS de SAS y el PROC DATASETS un procedimiento que no he usado habitualmente. Lo primero que vamos a hacer es observar que resultados arroja el PROC DATASETS en su sintaxis más sencilla, ver los contenidos de una librería:

[source languaje=»SAS»] ods trace on;
proc datasets lib=datos;
quit;
ods trace off;[/source]

Recordamos que ODS (Output Delivery System) TRACE ON nos permite ver en la log de SAS los elementos que se obtienen como resultado, en este caso, el más sencillo, tenemos:

Output Added:
————-
Name: Directory
Label: Directory Information
Template: Base.Datasets.Directory
Path: Datasets.Directory
————-

Output Added:
————-
Name: Members
Label: Library Members
Template: Base.Datasets.Members
Path: Datasets.Members
————-

Evidentemente nos interesa Members para poner en una tabla SAS todos los miembros de la librería:

[source languaje=»SAS»]
ods output Members=tablas;
proc datasets lib=datos ;
quit;
[/source]

Ahora tenemos que meter en una macrovariable todos los elementos del campo name de la tabla SAS que hemos generado. Para ello en vez de emplear el habitual PROC SQL podemos usar una concatenación sobre los valores de name que diera como resultado final la macrovariable con la lista de las tablas:

[source languaje=»SAS»]
data _null_;
length mv $2550.;
set tablas end=fin;
retain mv "";
mv = trimn(mv)||’ ‘||compress(name) ;
if fin then call symput (‘lista_tablas’,mv);
run;

%put &lista_tablas.; [/source]

En este paso data es interesante el uso de LENGTH al principio para garantizarnos un buen número de bits para nuestra macrovariable y el uso de RETAIN para crear una sucesión de concatenaciones donde es importante emplear TRIMN para evitar que los espacios en blanco nos generen problemas. En el ejemplo no se genera conjunto de datos SAS con DATA _NULL_ pero si queréis ver como se genera la variable escalonada que acumula a name generad una tabla SAS y entenderéis mejor como funciona. Habrá quien opine que estos pasos son más sencillos que los que puse en la entrada de 2009 pero yo prefiero el PROC SQL.

5 respuestas a «Truco SAS. Tablas de una librería en una macro variable»

  1. ¿Hay alguna forma de documentar un proyecto de SAS, y específicamente, poder saber todas las fuentes de datos externas? (si se importan datos desde archivos texto, excel, etc).

    • ¿Hacer como un markdown? No lo entiendo muy bien, las fuentes tienes que documentarlas, no creo que se pueda hacer de forma automática y si se pudiera hacer es muy interesante.

      • El tema puntual es el siguiente, mi antecesor realizó unos proyectos en SAS GUIDE, los cuales importan en algunos nodos, archivos excel, texto y CSV que deben ser actualizados, y si no se cuales son esas fuentes externas y ejecuto el proyecto, el resultado podría no ser real o estar actualizado; por ejemplo, en uno de los proyectos, en alguna parte se calcula el riesgo de sucursales, y para ello alguien me debe suministrar el archivo con las sucursales actualizadas, si no, siempre el calculo realizará el proceso sobre la misma base de sucursales. Para poder identificarlo, tengo que recorrer manualmente el proyecto y visualmente identificar donde hay nodos que importen fuentes externas. Algo similar a la opción de Access de «Administrador de Tablas Vinculadas». De antemano muchas gracias por su ayuda.

  2. Hola a todos,

    Estaba explorando los menús de SAS Enterprise guide y me encuentro con el administrador de parámetros, he creado un par de parámetros en un proyecto pero no se como usarlos en un programa. Uds saben?

    Gracias!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *