我的任务是从门户网站导入最新上传的文件。我设法使用spicial import addon将所有必要文件上传到临时lib。
我的代码如下:
%let Location_from1=\\*****\DavWWWRoot\sites\IDR\;
%let Location_to1=%sysfunc(pathname(work));
然后我使用插件并将几个文件导入到临时文件夹中,例如:
/u00/tmp/SAS_work9B07000013FF_asukr01lv/SAS_work3786000013FF_asukr01lv/*****1.xlsx
/u00/tmp/SAS_work9B07000013FF_asukr01lv/SAS_work3786000013FF_asukr01lv/*****2.xlsx
/u00/tmp/SAS_work9B07000013FF_asukr01lv/SAS_work3786000013FF_asukr01lv/*****3.xlsx
现在我需要找出最新的并将其导入到我的工作中。我该怎么办?
答案 0 :(得分:1)
从该路径看来,您正在使用* nix。在这种情况下,您可以使用Shell脚本获取最新文件:
filename latest pipe "cd &Location_to1.; ls -t1 | egrep 'xlsx$' | head -n 1";
data _null_;
infile latest truncOver;
input fileName $200.;
call symput('latestFile', strip(fileName));
run;
基于Bruno_SAS代码的与系统无关的解决方案:
%macro getLatestFile(dirName=, extType=, out=);
%let extType = %upcase(&extType);
* Get the list of all files with the last modification date;
data allFiles;
length msg $ 256 fileRef $ 8 dirName $ 1024 fileName $ 256 fullName $ 1281;
rc_check=fileexist("&dirName");
if rc_check=0 then
do;
putlog "ERROR: &sysMacroname &dirName does not exist";
stop;
end;
rc_assign=fileName(fileRef, "&dirName");
dirId=dopen(fileRef);
if dirId=0 then
do;
msg=sysmsg();
putlog "ERROR: &sysMacroname could not open &dirName as directory";
putlog msg;
rc_assign=fileName(fileRef);
stop;
end;
n_files=dnum(dirId);
do i=1 to n_files;
fileName=dread(dirId, i);
if upcase(scan(fileName, -1, "."))="&extType" then
do;
dirName="&dirName";
fullName=catx("/", dirName, fileName);
n_match + 1;
rc_fnOpen=fileName('current', "&dirName" || fileName);
fileId=fOpen('current');
lastChanged=input(fInfo(fileId, 'Last Modified'), datetime.);
format lastChanged datetime.;
rc_close=fClose(fileId);
rc_fnClose=fileName('current');
output;
end;
end;
dirId=dclose(dirId);
rc_assign=fileName(fileRef);
msg=catx(" ", "NOTE: &sysMacroname found", n_match,
"files that match &extType");
putlog msg;
keep dirName fileName fullName lastChanged;
run;
* Keep only the latest file;
proc SQL outobs=1;
create table &out. as
select fullName
from allFiles
order by lastChanged desc
;
quit;
%mend;
%getLatestFile(dirName= %sysFunc(pathName(work)), extType=xlsx, out=latest);