我有一个文件夹,其中每天添加一个文件,如下所示
Z:\old\stock110813.csv Z:\old\stock120813.csv Z:\old\stock130813.csv Z:\old\stock140813.csv
- 我想将最新的文件动态地导入 SAS,即。在文件夹中搜索最新日期
- 或希望 sas 制作最新的副本并更改文件的名称和位置
我已经在网上搜索了几天来测试少量代码,但我很挣扎,因此我们将不胜感激。
欢呼约翰
您想使用系统日期还是文件名中的日期来确定最新文件是什么?如果您想使用创建修改日期,请查看 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;
如果日期是可预测的(即今天的日期),那么您可以这样做:
%let date=%sysfunc(today,dateformat.); *whatever dateformat you need;
proc import file="z:\old\stock&date..csv"... ;
run;
如果没有,那么最好的办法是使用带有目录列表的管道来查看最新的文件名。像这样的东西(目录逻辑取决于你的服务器/操作系统/等)
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." ... ;