Hi - I'm using the following macro to import XML files. Is there any way I can store the filename of each XML file, as a variable? There is a /* 12/30/2020 */ comment I started a bit down in the code but wasn't sure how to proceed. %macro drive(dir,mapfile);
/** Creates a fileref **/
%let filerf=mydir;
/** Assigns the fileref to the directory you
passed in **/
%let rc=%sysfunc(filename(filrf,&dir));
/** Opens the directory to be read **/
%let did=%sysfunc(dopen(&filrf));
/** Returns the number of members in the directory that
you passed in **/
%let memcnt=%sysfunc(dnum(&did));
%let cnt=0;
%do i = 1 %to &memcnt;
/** Return the extension of the file found **/
%let ext=%upcase(%scan(%qsysfunc(dread(&did,&i)),2));
%let extlow=%LOWCASE(%scan(%qsysfunc(dread(&did,&i)),2));
/** Return the first name of the file **/
%let fname=%scan(%qsysfunc(dread(&did,&i)),1);
%if &ext=XMLOUT %then %do;
%let cnt=%eval(&cnt+1);
/** Create a different macro variable for each file
found **/
%let name&cnt=&fname..&extlow;
%end;
%end;
%do j = 1 %to &cnt;
/* %if &mapfile ne %then %do;*/
filename mapfile "&mapfile";
libname sxle&i xmlv2 "&dir.&&name&j" xmlmap=mapfile automap=replace;
/* %end;*/
/* %else %do;*/
/* libname sxle&i xmlv2 "&dir.&&name&j";*/
/* %end;*/
proc copy in=sxle&i out=work;
run;
/* Copy the files to a temporary work file */
proc sql;
select count(memname) into:total
from dictionary.tables
where libname="WORK" and memtype="DATA" ;
select memname into:mem1-:mem%left(&total)
from dictionary.tables
where libname="WORK" and memtype="DATA" ;
run;
/* Copy the files from the temporary work file to a library */
%do i=1 %to &total;
/* 12/30/2020 SL - add filedate to dataset*/
data &&mem&i;
proc append base=templib.&&mem&i data=&&mem&i force;
run;
proc datasets lib=work;
delete &&mem&i;
run;
quit;
%end;
libname sxle&i clear;
%end;
/** Close the directory **/
%let rc=%sysfunc(dclose(&did));
%mend drive;
... View more