如何使用SAS程序批量修改SAS程序?

问题描述 投票:1回答:1

我知道我们可以使用数据步骤将“* .sas”程序用作数据集,每行代码都是数据集的一条记录。然后我可以使用SAS更改数据集。

假设我在c:\ pgm中已经存在100个程序,我需要做的只是微小的修改,比如将所有这100个程序的flag1更改为flag2。如果我不想打开每个程序并逐个替换标志。有没有办法在c:\ pgm中获取所有程序名称,以便我可以遍历这些名称并进行替换。

我正在使用SAS 9.4和EG。谢谢!

sas
1个回答
0
投票

我可能有点过分复杂,但想法如下:

  • 提取文件夹中所有sas文件的列表
  • 创建这些文件的宏变量数组
  • 在每个提取的文件上创建一个循环并调用editFile宏。
%let dir=C:\prg;
%let var_prefix=vars_;

%macro batchEdit;
data _null_;
  pfad="&dir.";
  rc=filename("fileref",pfad);
  did=dopen("fileref");
  if did eq 0 then do;
    putlog "Dir does not exist";
    return;
  end;
  num=dnum(did);
  j=1;
  do i=1 to dnum(did);
    name=dread(did,i);
    if UPCASE(substrn(name,max(1,length(name)-3),4)) eq ".SAS" then do;
      call symput(CATS("&var_prefix.",j),name);
      j=j+1;
    end;
  end;
  call symput("varcnt",j);
  rc=dclose(did);
  rc=filename("fileref");
run;

  %DO j=1 %TO &varcnt.;
    %editFile(file=&&&var_prefix&j);
  %END;
%mend;

%macro editFile(file=);
%put In this Macro you should define what modification should be done on each single file;
%put Current File: &file.;
%mend;

%batchEdit;

附:我在unix SAS服务器上测试过,因此可能需要对PC SAS进行一些修改。

© www.soinside.com 2019 - 2024. All rights reserved.