gpt4 book ai didi

sas - 屏蔽 sysget 调用输出中的 & 符号

转载 作者:行者123 更新时间:2023-12-05 08:51:31 33 4
gpt4 key购买 nike

获取当前SAS程序的文件名我们可以这样写

%put %sysget(SAS_EXECFILEPATH);

我很不幸有人曾经创建了一个在路径中包含一个符号的目录(哎呀!)。让我们创建一个示例文件夹 C:\temp&other 并将我们的 test.sas 程序存储在该文件夹中。

现在,我的问题是:

是否可以屏蔽 %sysget(SAS_EXECFILEPATH) 的输出以避免 SAS 尝试解析宏变量 &other

简单的解决方案是更改路径名,但不幸的是,事情并不总是那么容易,而且我不允许更改文件夹名。


我的尝试:我尝试过的所有 nr 函数都没有帮助我,因为它们屏蔽了 %&。我尝试了以下(缩进行是 SAS 日志输出)。请注意,%NRQUOTE 的输出与“裸”调用相同。

%put %sysget(SAS_EXECFILEPATH); 
/* WARNING: Apparent symbolic reference OTHER not resolved. */
/* C:\temp&other\test.sas */

%put %nrstr(%sysget(SAS_EXECFILEPATH));
/* %nrstr(%sysget(SAS_EXECFILEPATH)) */

%put %nrquote(%sysget(SAS_EXECFILEPATH));
/* WARNING: Apparent symbolic reference OTHER not resolved. */
/* C:\temp&other\test.sas */

%put %superq(%sysget(SAS_EXECFILEPATH));
/* WARNING: Apparent symbolic reference OTHER not resolved.*/
/* ERROR: Invalid symbolic variable name C\TEST&OTHER\TEST.SAS. */

最佳答案

使用 data _null_ 步骤和 call symputx 创建一个包含 sas_execfilepath 值的宏变量。然后您可以使用 %superq() 解决它。

data _null_;
call symputx('sas_execfilepath', sysget('sas_execfilepath'));
run;

%put %superq(sas_execfilepath);

日志输出:

C:\temp&other\test.sas

关于sas - 屏蔽 sysget 调用输出中的 & 符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59735148/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com