0

我有一个文件夹,其中每天添加一个文件,如下所示

Z:\old\stock110813.csv Z:\old\stock120813.csv Z:\old\stock130813.csv Z:\old\stock140813.csv

  1. 我想将最新的文件动态地导入 SAS,即。在文件夹中搜索最新日期
  2. 或希望 sas 制作最新的副本并更改文件的名称和位置

我已经在网上搜索了几天来测试少量代码,但我很挣扎,因此我们将不胜感激。

欢呼约翰

4

2 回答 2

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;
于 2013-08-15T05:54:57.597 回答
1

如果日期是可预测的(即今天的日期),那么您可以这样做:

%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." ... ;
于 2013-08-14T15:01:08.490 回答