全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
11695 7
2015-02-27
复制代码
   虽然看了很多相关帖子,但对于宏编译和宏执行的区别(比如%str() 和 %bquote()的区别)之类的问题还是很迷糊。上面的程序跑出来的结果是begin。请问%nrstr()函数在这里为什么没能发挥阻止宏变量&a解析的功能,让&a直接作为两个普通字符输出呢? 而%upcase()函数也没能执行大写功能,输出的begin还是小写形态。这是为什么呢?


思考了很久也不懂,还望版上大神能指点迷津,谢谢!



二维码

扫码加我 拉你入群

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

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

全部回复
2015-2-28 15:10:01
我试着解释一下:
1. %nrstr()函数发挥了它的功能。
经过%nrstr()函数,&a并没有解析成begin,而是直接作为两个字符赋给了%upcase函数
比如可以比较下面两句:
%put  %upcase(&a);
%put  %upcase(%nrstr(&a));


2. %upcase函数也执行了其大写的功能。
%upcase函数收到的是 &a 这两个字符, 而%upcase() 函数将小写的a变成了大写的A。

3.接下来还有一点:%UPCASE does not mask special characters or mnemonic operators in its result, even when the argument was previously masked by a macro quoting function.
也就是%upcase()作用完之后,&回复了其功能,因此%put的是 &A解析后的值。

比如:
%put  %upcase(%nrstr(&a));
%put  %qupcase(%nrstr(&a));

下面这个帖子是对macro quoting的一点粗浅解释:
https://bbs.pinggu.org/thread-3111084-1-1.html

二维码

扫码加我 拉你入群

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

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

2015-2-28 18:45:18
pobel 发表于 2015-2-28 15:10
我试着解释一下:
1. %nrstr()函数发挥了它的功能。
经过%nrstr()函数,&a并没有解析成begin,而是直接作 ...
非常感谢您的回答,太详尽易懂了!正在拜读链接里总结macro quoting的帖子,特别是讲%str 与 %bquote 在参数中包含宏变量或宏调用时发挥的不同功能那段,让我有了种豁然开朗的感觉,实在是厉害!
二维码

扫码加我 拉你入群

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

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

2015-11-15 11:28:05
pobel 发表于 2015-2-28 15:10
我试着解释一下:
1. %nrstr()函数发挥了它的功能。
经过%nrstr()函数,&a并没有解析成begin,而是直接作 ...
请问为什么%nrstr(&a)解析成&a之后不是直接继续解析a,而是先把a upcase捏?是因为&a是字符?
二维码

扫码加我 拉你入群

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

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

2015-11-17 09:15:12
zy3137041217 发表于 2015-11-15 11:28
请问为什么%nrstr(&a)解析成&a之后不是直接继续解析a,而是先把a upcase捏?是因为&a是字符?
用help里的这句应该可以解释“When you mask a special character with a macro quoting function, it remains masked as long as it is within the macro facility (unless you use the %UNQUOTE Function).“

是因为&符号在%nrstr()的作用下,会被当做普通字符对待,除非有某种去掉mask的操作出现,否则&都会当成普通字符处理。
二维码

扫码加我 拉你入群

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

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

2015-11-18 11:58:56
pobel 发表于 2015-11-17 09:15
用help里的这句应该可以解释“When you mask a special character with a macro quoting function, it re ...
哦哦!就是%upcase之后相当于UNquote的作用?是否这种屏蔽的字符经过 除了宏引用函数之外的其它函数的作用 之后能够回复原来的作用捏?不好意思有点打破砂锅问到底了
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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