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: Register Now

Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!

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
  • 1853 views
  • 2 likes
  • 2 in conversation