请选择 进入手机版 | 继续访问电脑版
楼主: playmore
18866 13

[原创博文] 请问%let和call symput有什么区别? [推广有奖]

学科带头人

2%

还不是VIP/贵宾

-

TA的文库  其他...

R相关

经济学相关

金融工程

威望
1
论坛币
16309 个
通用积分
7.0197
学术水平
372 点
热心指数
394 点
信用等级
341 点
经验
15297 点
帖子
1194
精华
1
在线时间
1331 小时
注册时间
2007-1-11
最后登录
2023-12-15

初级学术勋章 初级热心勋章 中级热心勋章

playmore 发表于 2011-10-19 22:18:39 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
都是给宏变量赋值的,请问有什么区别吗?谢谢!
二维码

扫码加我 拉你入群

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

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

关键词:symput call let put 宏变量赋值

本帖被以下文库推荐

webgu 发表于 2011-10-19 22:25:49 |显示全部楼层 |坛友微信交流群
%let 在编译时赋值,call symput 在data 步执行时才赋值,并且要过了这个data步后才能引用。
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

使用道具

bobguy 发表于 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.

使用道具

tj0412ymy 发表于 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申明变量类型。

感兴趣的朋友可以测试一下下面这个例子。
  1. %macro test();
  2. /*Method 1*/

  3. data _NULL_;
  4. call symput('Today',put(today(),date9.));
  5. run;

  6. /*Method 2*/

  7. /*%let today=%sysfunc(today(),date9.);*/

  8. /*Method 3*/

  9. /*data todaydate;*/
  10. /*date=today();*/
  11. /*Proc sql noprint;*/
  12. /*select put(date,date9.) INTO: today*/
  13. /*from todaydate*/
  14. /*;*/
  15. /*quit;*/
  16. /*%put &today;*/
  17. %mend;
  18. %test;

  19. %put &today;
复制代码

已有 4 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
gudingji + 1 + 1 + 1 精彩帖子
licheng12345620 + 2 精彩帖子
黎明前的。 + 1 + 1 + 1 精彩帖子
--墨子-- + 5 + 1 + 1 + 1 精彩帖子

总评分: 论坛币 + 5  学术水平 + 5  热心指数 + 3  信用等级 + 3   查看全部评分

对SAS和统计方面感兴趣的朋友,请加SAS学习和认证讨论群:169157207。欢迎在群上讨论!

使用道具

ilovekate 发表于 2014-9-9 10:34:08 |显示全部楼层 |坛友微信交流群
解释的真好啊

使用道具

2014李露 发表于 2014-9-12 17:07:12 |显示全部楼层 |坛友微信交流群
醍醐灌顶啊!

使用道具

charke3784119 发表于 2014-11-10 10:25:43 |显示全部楼层 |坛友微信交流群
tj0412ymy 发表于 2011-10-20 09:42
这个问题提得很好,平时经常使用的宏变量定义方法有三种:
1. %let xxx=yyy;  /*%let语句几乎可以在程序 ...
非常不错

使用道具

hi11 发表于 2014-11-14 14:49:10 |显示全部楼层 |坛友微信交流群
学习!!

使用道具

Bridgenc 发表于 2014-11-14 21:47:22 |显示全部楼层 |坛友微信交流群
Thanks a lot

使用道具

diana_wxr 发表于 2015-4-30 15:08:37 |显示全部楼层 |坛友微信交流群
tj0412ymy 发表于 2011-10-20 09:42
这个问题提得很好,平时经常使用的宏变量定义方法有三种:
1. %let xxx=yyy;  /*%let语句几乎可以在程序 ...
[smile]一下子看的明明白白了,谢谢

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-3-28 21:48