用SAS解析文件名

用SAS解析文件名,sas,Sas,我有一个目录,其中每周都会创建一个新文件。名称如下: file_w1.csv file_w2.csv file_w3.csv 我需要做的是根据修改的日期提取最新的文件,然后解析文件扩展名前的2个字符。 因此,在本例中,我希望使用“w3”,因为我想使用它来知道我将在哪一周进行报告 如何在SAS中做到这一点?一种独立于操作系统的技术将使用SAS外部文件功能(如dopen、fopen和finfo)来获取有关文件夹及其项目的信息 考虑以下示例代码,该代码在Windows计算机上解析C:\Temp时对可

我有一个目录,其中每周都会创建一个新文件。名称如下:

file_w1.csv
file_w2.csv
file_w3.csv
我需要做的是根据修改的日期提取最新的文件,然后解析文件扩展名前的2个字符。 因此,在本例中,我希望使用“w3”,因为我想使用它来知道我将在哪一周进行报告


如何在SAS中做到这一点?

一种独立于操作系统的技术将使用SAS外部文件功能(如dopen、fopen和finfo)来获取有关文件夹及其项目的信息

考虑以下示例代码,该代码在Windows计算机上解析C:\Temp时对可用信息进行“完全转储”:

data _null_;
  length dfileref fileref $8 folder $200;

  rc = filename (dfileref, 'C:\Temp');

  did = dopen(dfileref);
  if did then do;
    do index = 1 to doptnum(did);
      featurename = doptname(did,index);  
      featurevalue = dinfo(did,featurename);
      put index= featurename= featurevalue=;
      if featurename = 'Directory' then folder = featurevalue;
    end; 

    do dindex = 1 to dnum(did);
      entryname = dread(did,dindex);
      put dindex= entryname=;

      rc = filename(fileref, cats(folder, '/', entryname));

      fid = fopen (fileref); * if entry is another folder fid will be 0;
      if fid then do;
        do findex = 1 to foptnum(fid);
          featurename = foptname(fid, findex);
          featurevalue = finfo(fid, featurename);
          put +2 findex= featurename= featurevalue=;
        end;
        fid = fclose(fid);
      end;

      rc = filename(fileref);
    end;

    did = dclose(did);
  end;

  rc = filename (dfileref);
run;
检查日志后,您可以缩减将特定的所需信息收集到数据集中所需的代码。然后,您可以使用SQL查询进一步处理数据:

data csv_files(keep=fullname lastmod where=(fullname like '%.csv'));
  length dfileref fileref $8 folder $200;

  folder = 'C:\Temp';
  rc = filename (dfileref, folder);

  did = dopen(dfileref);
  if did then do;
    do dindex = 1 to dnum(did);
      entryname = dread(did,dindex);
      rc = filename(fileref, cats(folder, '/', entryname));

      fid = fopen (fileref);
      if fid then do;
        fullname = finfo(fid,'Filename');
        lastmod = input(finfo(fid,'Last Modified'), datetime18.); format lastmod datetime18.;
        output;
        fid = fclose(fid);
      end;
      rc = filename(fileref);
    end;
    did = dclose(did);
  end;
  rc = filename (dfileref);
run;

proc sql;
  create table csv_newest as 
  select *, scan(scan(fullname,-1,'_'),1,'.') as tag
  from csv_files
  where prxmatch ('/_.+\.csv$/', fullname)
  having lastmod = max(lastmod)
  ;

读取文件列表,找到最新的文件,导入它。具体方式取决于您未指定的操作系统。请记住展示你所尝试的