我知道我们可以使用数据步骤来消息" * .sas"程序作为数据集,每行代码都是数据集的一条记录。然后我可以使用SAS更改数据集。
假设我在c:\ pgm中已经存在100个程序,我需要做的只是微小的修改,例如将所有这100个程序的flag1更改为flag2。如果我不想打开每个程序并逐个替换标志。有没有办法在c:\ pgm中获取所有程序名称,以便我可以遍历这些名称并进行替换。
我使用SAS 9.4和EG。谢谢!
答案 0 :(得分:0)
我可能使它复杂化了一点,但想法如下:
%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上进行一些修改。