Tablas del diccionario de SAS

Tablas del diccionario de SAS

En ocasiones resulta útil acudir al diccionario de SAS para obtener información de la estructura de las tablas con las que trabajamos.

  • dictionary.tables: tablas de SAS a la que tiene acceso el usuario con información de metadata
  • dictionary.columns: información de metadata a nivel de columna para todas las tablas de SAS a la que tiene acceso el usuario

Para obtener todas las tablas a las que tenemos acceso:

proc sql;
create table tab as(select * from dictionary.tables);
quit;

A continuación un sencillo ejemplo que accede a las tablas dictionary.tables y dictionary.columns para obtener todas las tablas y sus columnas contenidas
en una determinada librería:

 

/* Creamos tablas de trabajo: prueba1 y prueba2 */

data prueba1;
var1=’a’;var2 = 5;
run;

data prueba2;
varc = ‘c’;varn = 8;
run;

%macro obtener_campos(libreria);

%put Obtenemos tablas y campos de la librería &libreria;

/* Obtenemos todas las tablas contenidas en la librería, las recorremos
con una estructura de control iterativa obteniendo para cada tablas
todas sus columnas */

PROC SQL;
create table tablas as (SELECT memname
FROM dictionary.tables WHERE libname= upcase(“&libreria”) );
quit;

%let dsid = %sysfunc (open(tablas));
%let nobs = %sysfunc (attrn(&dsid, NOBS));
%if &nobs > 0 %then %do;
%do i = 1 %to &nobs;
%let rc = %sysfunc (fetch(&dsid));
%let tabla = %sysfunc (getvarc(&dsid,1));
%put Obtenemos campos tabla = &tabla;

/* Obtenemos todas las columnas y el tipo de cada una para una tabla determinada */

PROC SQL;
create table columnas as (SELECT name, type
FROM dictionary.columns WHERE libname= “WORK” AND memtype = ‘DATA’ and                    memname=”&tabla”);
quit;

%let dsidc = %sysfunc (open(columnas));
%let nobsc = %sysfunc (attrn(&dsidc, NOBS));
%if &nobsc > 0 %then %do;
%do j = 1 %to &nobsc;
%let rc = %sysfunc (fetch(&dsidc));
%let columna = %sysfunc (getvarc(&dsidc,1));
%let tipo = %sysfunc (getvarc(&dsidc,2));
%put Nombre columna = &columna y tipo = &tipo;
%end;
%end;
%let rc = %sysfunc (close(&dsidc));

%end;
%end;
%let rc = %sysfunc (close(&dsid));

%mend;

%obtener_campos(WORK);

 

Si estás interesado en formarte en SAS, te recomendamos nuestro curso on-line: http://online.datademy.es/course/sas/

Un blog de SAS interesante: http://aprendesas.blogspot.com

Share

Deja un comentario