Sas 宏观分辨率
我有一个宏,该宏解析为一个包含符号and的字符串,这会导致错误Sas 宏观分辨率,sas,sas-macro,Sas,Sas Macro,我有一个宏,该宏解析为一个包含符号and的字符串,这会导致错误警告:明显的符号引用a未解析 比如说 Data _NULL_; T=%NRSTR("A&A"); call symput("test",T); run; %put &=test.; 有没有办法只解决一次?NR函数似乎删除了所有&的含义,并阻止任何解析。我只想解决一次 下面的示例可以工作,但我需要它作为数据步骤的一部分,因为有几个其他regex函数用于创建a&a字符串 %let Test=%NRSTR(A&A
警告:明显的符号引用a未解析
比如说
Data _NULL_;
T=%NRSTR("A&A");
call symput("test",T);
run;
%put &=test.;
有没有办法只解决一次?NR函数似乎删除了所有&
的含义,并阻止任何解析。我只想解决一次
下面的示例可以工作,但我需要它作为数据步骤的一部分,因为有几个其他regex函数用于创建a&a
字符串
%let Test=%NRSTR(A&A);
%put &test;
有什么想法吗?在数据步骤中,对发送到宏环境的文本值进行单引号引用
为了防止将&
解释为解析请求,在使用宏符号时,%superq
将宏符号
Data _NULL_;
T = 'A&A';
call symput("test",T);
run;
%put NOTE: test macro symbol value is %superq(test);
---------- LOG ----------
21 %put NOTE: test macro symbol value is %superq(test);
NOTE: test macro symbol value is A&A
要解决第一次使用的问题,只需使用单引号。这将允许您创建带有符号和的宏变量
data _null_;
call symputx('test','A&A');
run;
然后使用一些宏代码添加宏引用。我发现%SUPERQ()最简单
%let test=%superq(test);
如果在同一数据步骤中以这种方式生成大量宏变量,则可能需要使用RESOLVE()或CALL EXECUTE()函数,以便在创建宏变量后立即运行%LET
data _null_;
set variable_list;
call symputx(name,value);
call execute(catx(' ','%let',name,'=%superq(',name,');'));
run;