全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
19527 13
2011-10-19
都是给宏变量赋值的,请问有什么区别吗?谢谢!
二维码

扫码加我 拉你入群

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

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

全部回复
2011-10-19 22:25:49
%let 在编译时赋值,call symput 在data 步执行时才赋值,并且要过了这个data步后才能引用。
二维码

扫码加我 拉你入群

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

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

2011-10-20 09:11:50
%let is in SAS/MCARO language. It is also a global statement.

call symput/symputx belongs to data step in SAS.

They are very different.
二维码

扫码加我 拉你入群

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

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

2011-10-20 09:42:33
bobguy 发表于 2011-10-20 09:11
%let is in SAS/MCARO language. It is also a global statement.

call symput/symputx belongs to data ...
这个问题提得很好,平时经常使用的宏变量定义方法有三种:
1. %let xxx=yyy;  /*%let语句几乎可以在程序的任何位置上去定义宏变量*/
2. Call Symput('xxx','yyy'); /*只能在Date Step中定义*/
3. select xxx into: yyy. /*只能在Proc SQL中定义*/

三种定义方式最大的区别是在MACRO函数内定义所生成的宏变量的类型不同:
Call Symput在宏函数中定义的宏变量可以在函数外调用;而%let和 Select into则不能,因为这2种方法在MACRO函数内生成的是局部宏变量,若要想在MACRO函数外调用,需事先用%global申明变量类型。

感兴趣的朋友可以测试一下下面这个例子。
复制代码

二维码

扫码加我 拉你入群

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

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

2014-9-9 10:34:08
解释的真好啊
二维码

扫码加我 拉你入群

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

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

2014-9-12 17:07:12
醍醐灌顶啊!
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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