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: Call for Content

Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!

Submit your idea!

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