Just to show you what you need to do to get the most recent file with these dates:
first, I created some sample files:
proc export
data=sashelp.class
file="/folders/myfolders/ADRESSES_26MAY2021121204.csv"
dbms=csv
replace
;
proc export
data=sashelp.class
file="/folders/myfolders/ADRESSES_27MAY2021121204.csv"
dbms=csv
replace
;
proc export
data=sashelp.class
file="/folders/myfolders/ADRESSES_28MAY2021121204.csv"
dbms=csv
replace
;
Then, I set up the parameters:
%let path=/folders/myfolders;
%let fname=ADRESSES_;
Next, I used file/directory functions to retrieve the filenames, select files, and extract the timestamp:
data fnames;
length
fref $8
fname $200
datestr $17
;
format fdate e8601dt19.;
rc = filename(fref,"&path.");
did = dopen(fref);
if did ne 0
then do;
do i = 1 to dnum(did);
fname = dread(did,i);
if index(fname,"&fname.")
then do;
datestr = scan(scan(fname,-2,"."),-1,"_");
date = input(substr(datestr,1,9),date9.);
time = input(substr(datestr,10),hhmmss6.);
fdate = dhms(date,0,0,time);
output;
end;
end;
rc = dclose(did);
end;
rc = filename(fref);
keep fname fdate;
run;
To put the most recent first, I sorted in descending order:
proc sort data=fnames;
by descending fdate;
run;
so I could put the first entry into a macrovar:
data _null_;
set fnames (obs=1);
call symputx("fname",fname,"g");
run;
which I then used to import:
proc import
datafile="&path./&fname."
dbms=csv
replace
out=test
;
run;
But note, that this can be done in a single step if proper timestamps are used and XCMD is active:
data _null_;
infile "ls -r &path./&fname.*.csv" pipe;
length fname $200;
input fname;
call symputx("fname",fname,"g");
stop;
run;
Maxim 33: Intelligent Data Makes for Intelligent Programs.
This is also true for file or directory names.
... View more