我有一个文件夹,每天都会添加一个文件,如下所示
Z:\老\ stock110813.csv Z:\老\ stock120813.csv Z:\老\ stock130813.csv Z:\老\ stock140813.csv
我一直在网上搜索一小段代码,但是我很挣扎,所以任何帮助都会受到赞赏。
欢呼约翰答案 0 :(得分:1)
如果日期是可预测的(即今天的日期),那么你可以这样做:
%let date=%sysfunc(today,dateformat.); *whatever dateformat you need;
proc import file="z:\old\stock&date..csv"... ;
run;
如果没有,那么最好的办法是使用目录列表中的管道来查看最新的文件名。这样的事情(目录逻辑取决于你的服务器/ OS /等)。
filename mydir pipe 'dir /b /od /a-d z:\old\';
data myfiles;
infile mydir;
input @1 filename $32.;
call symput('filename',filename);
run;
proc import file="z:\old\&filename." ... ;
答案 1 :(得分:1)
您是否要使用系统日期或文件名中的日期来确定最新文件是什么?如果要使用创建修改日期,请查看foptname函数以确定它们。此代码查看文件名中的日期。此代码无需X命令授权即可运行。
data newestFile (keep=newestFile);
format newestFile $20.;
retain newestFile newestDate;
rc = filename("dir","z:\old\");
did = dopen("dir");
/* loop through file and subdirectories in a directory */
do i = 1 to dnum(did);
csvFile = dread(did,i);
rc=filename("fid",cats("z:\old\",csvFile));
sdid=dopen("fid");
/*check if date in name is newest if it is a file */
if sdid le 0 then do;
csvFileDate = input(substr(csvFile,6,6),ddmmyy6.);
if csvFileDate gt newestDate then do;
newestDate = csvFileDate;
newestFile = csvFile;
end;
end;
else rc = dclose(sdid);
end;
rc = dclose(did);
/* move and rename file with latest date to newestFile.csv */
rc = rename(cats("z:\old\",newestFile), "z:\new\newestFile.csv",'file');
run;