BookmarkSubscribeRSS Feed
JU2
Calcite | Level 5 JU2
Calcite | Level 5

Hola tengo una macro para importar ficheros txt de un directorio, mi problema es que cuando crea los ficheros SAS estos se crea con un nombre secuencial, y a mi me gustaria que conservara el nombre que tiene el txt.

Este sería mi programa:

%MACRO importarTXT(Directorio);

FILENAME REFDIR "&Directorio";

%LET DIRID=%sysfunc(DOPEN(REFDIR));

%LET NFILES=%sysfunc(DNUM(&DIRID));

%DO I=1 %TO &Nfiles;

%LET nombre=%sysfunc(DREAD(&DIRID,&i));

 

 

 

 

PROC IMPORT OUT= fichero&i

DATAFILE= "&Directorio\&nombre"

 

DBMS=TAB REPLACE;

DELIMITER='7C'x;

 

GETNAMES=yes;

 

 

RUN;

 

%end;

%LET DIRCLOSE=%sysfunc(DCLOSE(&DIRID));

%MEND importarTXT;

 

%importarTXT(Directorio=C:\JUANA\macro);

 

 

 

1 REPLY 1
Alejandro
SAS Employee

Sólo sería necesario extraer el nombre del archivo y colocarlo en cada iteración. Agregaría dos líneas:

%LET len=%LENGTH(&nombre); /* Longitud de la cadena */
%LET name=%SUBSTR(&nombre,1,&len-4); /* Obtención del nombre */

 

Quedando el código de la siguiente manera:

 

%MACRO importarTXT(Directorio);

FILENAME REFDIR "&Directorio";

%LET DIRID=%sysfunc(DOPEN(REFDIR));
%LET NFILES=%sysfunc(DNUM(&DIRID));

%DO I=1 %TO &Nfiles;
%LET nombre=%sysfunc(DREAD(&DIRID,&i));

 

%LET len=%LENGTH(&nombre); /* Longitud de la cadena */
%LET name=%SUBSTR(&nombre,1,&len-4); /* Obtención del nombre */

 

PROC IMPORT OUT= WORK.&&name
DATAFILE= "&Directorio\&nombre"
DBMS=TAB REPLACE;
DELIMITER='7C'x;
GETNAMES=yes;
RUN;
%end;

%LET DIRCLOSE=%sysfunc(DCLOSE(&DIRID));

%MEND importarTXT;

 

%importarTXT(Directorio=C:\temp);