【问题标题】:SAS - read in only certain filenamesSAS - 仅读取某些文件名
【发布时间】:2014-02-19 22:15:36
【问题描述】:

我正在使用以下代码将目录中的文件名写入数据集。目前它读取该目录中的所有文件名。我在试图弄清楚如何只读取特定文件名时遇到了麻烦。例如,我怎样才能只返回像'abc%.txt'这样的文件?

代码:

%macro get_filenames(location);
filename _dir_ "%bquote(&location.)";
data filenames(keep=fname);
  handle=dopen( '_dir_' );
  if handle > 0 then do;
    count=dnum(handle);
    do i=1 to count;
      fname=dread(handle,i);
      output filenames;
    end;
  end;
  rc=dclose(handle);
run;
filename _dir_ clear;
%mend;


%get_filenames("c:\temp\"); 

【问题讨论】:

    标签: macros sas filenames


    【解决方案1】:

    您可以过滤文件名数据集(避免修改宏)或在宏中(这样会更有效)。

    为清楚起见,我建议修改文件名数据集,除非您的目录特别大..

    data new:
    set filenames;
    if substr(fname,1,3)='abc' and scan(fname,2,'.')='txt';
    run;
    

    或者,修改宏:

    %macro get_filenames(location);
    filename _dir_ "%bquote(&location.)";
    data filenames(keep=fname);
      handle=dopen( '_dir_' );
      if handle > 0 then do;
        count=dnum(handle);
        do i=1 to count;
          fname=dread(handle,i);
          /* custom filter */
          if substr(fname,1,3)='abc' and scan(fname,2,'.')='txt' then output filenames;
        end;
      end;
      rc=dclose(handle);
    run;
    filename _dir_ clear;
    %mend;
    

    【讨论】:

    • 完美,谢谢。我很接近。我在宏中尝试了类似的 if/then,但我没想过使用 substr 和 scan。
    猜你喜欢
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    相关资源
    最近更新 更多