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

日付が予測可能な場合 (つまり、今日の日付)、次のことができます。

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

システム日付またはファイル名の日付を使用して、最新のファイルを判別しますか? create of modified date を使用する場合は、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 に答える