- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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);
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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);