FAQ:在SAS中如何获得当前正在运行的批作业或者交互式作业的文件名?

时间:2022-02-21 04:57:23


 问:在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);

原文来自:http://support.sas.com/faq/042/FAQ04296.html