SAS OnDemand for Academics环境如何获取调用指定宏的脚本文件名
解决方案
失效原因说明
你之前尝试的SAS_EXECFILEPATH是本地桌面版SAS的系统环境变量,SAS® OnDemand for Academics采用远程SAS Studio运行环境,该环境变量无对应有效值,因此无法实现需求。
可用实现方案
从你提供的%put _ALL_输出中可以看到已经存在全局自动变量_SASPROGRAMFILE,该变量存储了当前正在执行的SAS脚本的完整路径,直接提取即可:
完整宏代码(mymacro.sas)
%macro mymacro; /* 声明局部变量避免污染全局符号表 */ %local exec_full_path exec_file_name; /* 读取当前执行脚本的完整路径 */ %let exec_full_path = &_SASPROGRAMFILE; /* 提取路径末尾的纯文件名(Linux环境路径分隔符为/,取最后一段) */ %let exec_file_name = %scan(&exec_full_path, -1, /); /* 声明全局输出变量并赋值 */ %global myfilename; %let myfilename = &exec_file_name; %mend mymacro;
测试验证
你原有的test.sas代码无需修改,执行后%put &myfilename;会直接输出test.sas。
注意事项
- 该方案仅适配SAS Studio运行环境,包括SAS® OnDemand for Academics
- 如果宏是在被
%include引入的子脚本中调用,_SASPROGRAMFILE返回的是顶层执行脚本的路径,若需获取被引入的子脚本文件名,可以使用SYSINCLUDEFILENAME自动变量
内容的提问来源于stack exchange,提问作者storaged
相关产品推荐
相关产品推荐

