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);

SAS Innovate 2025: Save the Date

 SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!

Save the date!

Mastering the WHERE Clause in PROC SQL

SAS' Charu Shankar shares her PROC SQL expertise by showing you how to master the WHERE clause using real winter weather data.

Find more tutorials on the SAS Users YouTube channel.

Discussion stats
  • 1 reply
  • 1831 views
  • 2 likes
  • 2 in conversation