全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 数据分析与数据挖掘
10797 4
2011-11-24
宏函数%STR()能够隐藏一些特殊的符号,%NRSTR()与%STR的唯一不同之处就是还可以隐藏 & %这两个Macro Triggers, 同样的%BQUOTE() 和 %NRBQUOTE()的区别也是如此。看下面的程序:

%let period=%str(May&Jun);
%put  .
像这个就会出现Warning: Apparent symbolic reference JUN not resolved

%let Period=%nrstr(May&Jun);
%put .

这个就不会出现Warning

%let text=%bquote(May&Jun);
%put &text;
这个肯定也会出现Warning;

%let text=%nrbquote(May&Jun);
%put &text;

但是这个为什么还会出现这个Warning: Apparent symbolic reference JUN not resolved ???
为什么???求高人指教!!!


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2011-11-24 21:47:29
同问
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-11-25 14:42:56
deng203 发表于 2011-11-24 21:47
同问
没人回答,还得自己研究!我大概知道怎么回事儿了
因为%bquote()和%nrbquote()函数是在execution time起作用的。
如果提交这个语句,会出现两个Warning语句:
%let text=%bquote(May&Jun);
这是因为一个是compile time给出的Warning,另一个是execution time给出的Warning
%let text=%nrbquote(May&Jun);
这个语句有一个Warning,是因为compile time给出的Warning。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-11-25 15:31:35
谢谢,虽然还是不明白
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-5-19 22:23:42
466046020 发表于 2011-11-25 14:42
没人回答,还得自己研究!我大概知道怎么回事儿了
因为%bquote()和%nrbquote()函数是在execution time起 ...
今天有人问我这个问题,正好回答一下:
SAS marco的引用有
复制代码
其中,最前面有nr的都不解析&, %这两个代表宏的符号。所以,只要有这两个符号,而同时又不真是宏,而仅仅表示and和百分符号,那么,就需要用%nrstr, %nrbquote。如果不这样做,同时该代码之前没有对应的宏被定义,那么报错,如果恰好定义了同名的宏,那么该宏的代码被解析过来。(这不是你希望的)
%str和%nrstr是在宏编译期起作用,而其他的都是在宏运行期起作用。简单说,%str更像是对固定的文字有用。而%bquote等对宏变量更有用。
总之,多使用%bquote和%nrbquote一般没有什么错。。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群