En ocasiones necesitamos listar los archivos de un directorio. En SAS se puede hacer así. Creamos una tabla en WORK con los nombres de los archivos y subcarpetas de un directorio:
/* PONE ARCHIVOS DE UN DIRECTORIO EN TABLA SAS */
%macro archivos(directorio);
data archivos;
rc = filename('dir', "&directorio.");
dirid = dopen('dir');
numarchivos = dnum(dirid);
do i = 1 to numarchivos;
nombrearchivos = dread(dirid, i);
output;
end;
rc = dclose(dirid);
drop rc i;
run;
%mend archivos;
/* EJEMPLO SI QUEREMOS QUE NOS LISTE LAS TABLAS SAS DEL WORK */
proc sql noprint;
select path into :ub_work
from sashelp.vlibnam
where libname = "WORK";
quit;
%archivos(&ub_work.);
data archivos_sas;
set archivos;
where index(lowcase(nombrearchivos), "sas7bdat") > 1;
run;
Puede sernos de gran utilidad cuando deseemos importar un gran número de ficheros de texto o si necesitamos manejarnos con archivos y shell; empleamos las funciones de “archivo” de SAS (en breve pondré un artículo sobre las funciones SAS). El programa se puede sofisticar empleando extensiones, eliminando carpetas… Espero vuestros comentarios y mejoras sobre el uso de esta macro.
Compartiendo conocimientos.