问:在SAS中如何获得当前正在运行的批作业或者交互式作业的文件名?
答:
如果你运行一个批作业,你可在当前程序中写入如下代码
%put The current program is %sysfunc(getoption(sysin));
如果你交互式运行作业,那么你可以使用下面代码来获得当前程序的文件名
/*注: 如果多个编辑窗口被打开,则需要注释掉 STOP语句, SASHELP.VEXTFL 为每一个打开的编辑窗口都建立一个唯一的文件引用 ,删除STOP语句可以让我们接收到最后被打开的文件 */
%macro pname;
%global pgmname;
%let pgmname=;
data _null_;
set sashelp.vextfl;
if (substr(fileref,1,3)='_LN' or substr
(fileref,1,3)='#LN' or substr(fileref,1,3)='SYS') and
index(upcase(xpath),'.SAS')>0 then do;
call symput("pgmname",trim(xpath));
stop;
end;
run;
%mend pname;
%pname;
%put pgmname=&pgmname;
上面代码在SAS9中不是必须的,在SAS9中为增强型编辑器提供了一个新的环境变量,命名为 SAS_EXECFILENAME,你可以在你的当前程序中使用下面代码来接收当前运行的程序名:
%put %sysget(SAS_EXECFILENAME);
同时,与之相应的还有一个命名为 SAS_EXECFILEPATH 的环境变量用于保存当前运行程序的全路径(含有文件名)
%put %sysget(SAS_EXECFILEPATH);