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

时间:2018-04-18 20:38:47

标签: sas

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

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

我使用SAS 9.4和EG。谢谢!

1 个答案:

答案 0 :(得分: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;

P.S。我已经在unix SAS服务器上对其进行了测试,因此可能需要在PC SAS上进行一些修改。