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

  • 本文关键字:SAS 程序 修改 何使用 sas
  • 更新时间 :
  • 英文 :


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

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

我使用的是 SAS 9.4 和 EG。谢谢!

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

  • 提取文件夹中所有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上进行一些修改。

最新更新