全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2308 8
2011-01-27
%macro one(input);
  %two
  %put the value is &date;
%mend;

     %macro two;
          data _null_;
          call symput (
'date','12SEP2008');
          run;
     %mend;
%let date=31DEC2006;
%one(&date);

&date 为什么是'12SEP2008' 而不是31Dec2006?为什么来自global 而不是local symbol table 啊?请高手指教,多谢了。

二维码

扫码加我 拉你入群

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

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

全部回复
2011-1-27 10:49:02
不懂,帮顶
刚开始看SAS
二维码

扫码加我 拉你入群

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

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

2011-1-27 22:33:29
12SEP2008是在宏two的local sample table中啊,31DEC2006是在global中的,SAS macro执行时先从local开始,找不到的话才在global中找的
二维码

扫码加我 拉你入群

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

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

2011-1-27 22:50:06
我觉得这里只有一个global的宏:date.

call symput ('date','12SEP2008'); 是将date的值从 "31DEC2006" 改写为 "12SEP2008",因此无论是在函数one()中,还是在open code中,date的值都将显示为12SEP2008.

你可以run 一下以下code:
%macro one(input);
  %two
  %put the value of date in function one is &date;
%mend;

     %macro two;
          data _null_;
          call symput ('date','12SEP2008');
          run;
     %mend;
%let date=31DEC2006;
%one(&date);

%put the value of date in open code is &date;

两个date显示的值都是一样的
二维码

扫码加我 拉你入群

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

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

2011-1-28 00:31:50
补充一下,唯一一个local macro是函数one的参数input, call function two时,call symput在local symbol table中找不到macro date, 下一步是查询 global symbol table, 因此date 是global macro

希望表达清楚了
二维码

扫码加我 拉你入群

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

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

2011-1-28 00:59:54
非常清楚,太感谢了。
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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