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.