caibirdcnb 发表于 2016-1-15 15:12 
谢谢上面各位,关于下面的例子,我还是不能从逻辑上明白为什么&text5等于May&abc而不是等于May123。
我的逻 ...
引用pobel大神的例子:
%put 3的结果和%put 2一样,这里的%UNQUOTE需要在执行时才起作用,而在编译阶段已经认为&符号没有引用宏变量,而且这里并没有quote存在;
同理,%bquote(May&Jun)在编译阶段,将&Jun解析为&abc。
SAS认为&abc中的&符号没有引用宏变量,所以执行阶段%bquote(May&abc)没有解析abc。
正确引用的宏函数
%let abc=123;
%let Jun=%nrstr(&abc);
%let text5=%unquote(%bquote(May&Jun));
%put &text5;
执行阶段1:
%bquote(May&Jun)在编译阶段,将&Jun解析为&abc。&为普通文本。
%bquote认为&abc中的&符号没有引用宏变量,%bquote(May&abc)没有解析abc。
执行阶段2:
%unquote(May&abc)把字符&abc解析为123,因此结果为May123。
或者在%put时加上%unquote