全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
17544 17
2014-10-14
悬赏 10 个论坛币 未解决
复制代码
输出为:
a is dog
复制代码
输出为:
a is cat
复制代码
输出为:
a is dog
复制代码
输出为:
a is pubby
复制代码
输出为:
a is cat
现在我已经完全晕了,求大神解惑。

update2:楼主已经自己想通了,思路在“藤椅”那楼(这是2楼还是3楼?)

update 1:
根据以上各种情况,归纳出来只要宏中没有相同名称paramater,就以后一个%let为准,paramater中有同名的,以第一个%let为准。就是不知道其中的道理是什么。。。。
二维码

扫码加我 拉你入群

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

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

全部回复
2014-10-14 16:40:00
复制代码
复制代码


同样还有以上两组输出结果,实在是太诡异了,求大神解答
二维码

扫码加我 拉你入群

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

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

2014-10-14 19:18:58
经过一番纠结,貌似自己纠结出来了。。。

首先说明下%let的赋值过程
以:%let a = b; 为例
先在local variable table查找宏变量a是否存在。如果存在a,那么会更新a中的值为b;如果不存在,则去global variable table中查找是否存在a,如果存在则更新a。如果根本不存在宏变量a,那么将建立一个most local variable(就是说,如果%let语句出现在某个macro function内,那么这个变量仅能够在此macro function内使用。如果是单独的一句%let,那么就是global variable)

现在来看题
复制代码
首先单独的一句%let,建立了一个global macro variable 'a',赋值为'cat'。接着在macro function内又出现了一句%let,此时sas会先在此macro function范围内查找是否存在变量a,结果是不存在。那么sas继续在global macro variable中查找是否存在a,结果是存在,sas将global macro variable 'a'的值更新为dog。由于a是global variable,所以最后输出的结果:a is dog

复制代码
这一题,不同的地方是,在macro function内建立了一个local macro variable 'a',那么%let a = dog这一语句只会更新该local macro variable 'a',而不会改变global variable 'a'的值。所以在最后输出global variable 'a'的时候结果依然是'cat'。用以下程序可以很好的显示local和global variable 'a'的值。

复制代码



用以上的思路同样可以解释其他几个例子的输出结果,我就不一一列举了
二维码

扫码加我 拉你入群

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

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

2015-8-14 12:48:25
谢谢楼主,很有帮助!
二维码

扫码加我 拉你入群

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

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

2015-12-25 10:45:00
我最近也在纠结这个问题 感谢楼楼解惑
二维码

扫码加我 拉你入群

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

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

2015-12-25 18:21:12
弄清楚全局宏变量和局部宏变量的关系就好了
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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