sas导入文件夹中的最新csv文件

时间:2013-08-14 14:51:39

标签: csv import sas getlatest

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

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

  1. 我想将最新的文件动态导入SAS,即。在文件夹中搜索最新日期
  2. 或者希望sas制作最新的副本并更改名称&文件的位置
  3. 我一直在网上搜索一小段代码,但是我很挣扎,所以任何帮助都会受到赞赏。

    欢呼约翰

2 个答案:

答案 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;