全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
11261 6
2010-05-29
对于数据步和过程步的编译和执行可以理解,但是对宏的编译和执行一直搞不清?

%str和%quote好像说一个是在编译时起作用,一个是运行时起作用,但是没弄明白,望版上牛人指点迷津!多谢了!
二维码

扫码加我 拉你入群

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

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

全部回复
2010-5-29 12:04:04
ding .........
二维码

扫码加我 拉你入群

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

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

2010-5-30 01:13:53
macro 定义提交之后,编译过程会检查语法,然后编译,虽然也不是很清楚macro编译除了转码还会做什么。
但%str确实是在编译中work,所以当macro被调用时,进word scanner以及macro processor的时候,input的并不是函数%str以及其参数,而是其结果,即在compilation中function %str计算得到的result,但这个结果的实体到底是什么,进word sanner和macro processor的是什么,只有sas自己知道了,或许仍然外包了其他特征而不是直接还原的字符串,否则%str就白用了。
%quote则应该是编译时候就对其转码,而调用时,macro processor再对其处理。
二维码

扫码加我 拉你入群

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

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

2010-5-30 03:48:25
yzzhang 发表于 2010-5-29 11:34
对于数据步和过程步的编译和执行可以理解,但是对宏的编译和执行一直搞不清?

%str和%quote好像说一个是在编译时起作用,一个是运行时起作用,但是没弄明白,望版上牛人指点迷津!多谢了!
Here is a simple example to illustrated the difference.
The %str will hide the resoled value of op (=) in compiling process but not in executing process.

The %quote will hide it in both process -- that results in excution error.


%macro test(op);
   %if 7 %str(&op) 6 %then %put 1;
   %else %put 0;
%mend;

%test(=)

%macro test2(op);
   %if 7 %quote(&op) 7 %then %put 1;
   %else %put 0;
%mend;

%test2(=)
二维码

扫码加我 拉你入群

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

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

2010-5-30 08:48:29
多谢yatming bobguy,现在有点明白了!^_^
二维码

扫码加我 拉你入群

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

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

2014-3-20 22:27:33
mark~
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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