宏分辨率
Macro resolution
我有一个宏可以解析为包含一个 & 符号的字符串,这会导致错误 WARNING: Apparent symbolic reference A not resolved
。
例如
Data _NULL_;
T=%NRSTR("A&A");
call symput("test",T);
run;
%put &=test.;
有没有办法只解析一次? NR 函数似乎删除了所有 &
的含义并阻止了任何解析。我只想解决一次。
以下示例有效,但我需要它成为数据步骤的一部分,因为还有其他几个正则表达式函数用于创建 A&A
字符串。
%let Test=%NRSTR(A&A);
%put &test;
有什么想法吗?
在 DATA 步中单引号发送到宏环境的文本值。
为了防止&
被解析为解析请求,使用时%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;
我有一个宏可以解析为包含一个 & 符号的字符串,这会导致错误 WARNING: Apparent symbolic reference A not resolved
。
例如
Data _NULL_;
T=%NRSTR("A&A");
call symput("test",T);
run;
%put &=test.;
有没有办法只解析一次? NR 函数似乎删除了所有 &
的含义并阻止了任何解析。我只想解决一次。
以下示例有效,但我需要它成为数据步骤的一部分,因为还有其他几个正则表达式函数用于创建 A&A
字符串。
%let Test=%NRSTR(A&A);
%put &test;
有什么想法吗?
在 DATA 步中单引号发送到宏环境的文本值。
为了防止&
被解析为解析请求,使用时%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;