楼主: sas_user
2330 8

[原创博文] SAS adv -- 请教 [推广有奖]

  • 0关注
  • 0粉丝

已卖:30份资源

硕士生

45%

还不是VIP/贵宾

-

威望
0
论坛币
159 个
通用积分
0
学术水平
14 点
热心指数
24 点
信用等级
7 点
经验
2160 点
帖子
178
精华
0
在线时间
148 小时
注册时间
2008-11-26
最后登录
2015-3-15

楼主
sas_user 发表于 2011-1-27 10:42:24 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
%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 啊?请高手指教,多谢了。

二维码

扫码加我 拉你入群

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

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

关键词:symbol symput Global Macro value local null

本帖被以下文库推荐

沙发
camel_wangz 发表于 2011-1-27 10:49:02
不懂,帮顶
刚开始看SAS

藤椅
hssnow 发表于 2011-1-27 22:33:29
12SEP2008是在宏two的local sample table中啊,31DEC2006是在global中的,SAS macro执行时先从local开始,找不到的话才在global中找的
My Blog: http:/hssnow.name/
宁静致远

板凳
HaiMM01 发表于 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显示的值都是一样的

报纸
HaiMM01 发表于 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

希望表达清楚了

地板
sas_user 发表于 2011-1-28 00:59:54
非常清楚,太感谢了。

7
sas_user 发表于 2011-1-28 01:27:32
还想问一下,加了一个local  date 在two 里,为什么 2SEP2008 还是没有被赋予给date 呢?


%macro one(input);
  %two
  %put the value of date in function one is &date;
%mend;

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

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

8
soporaeternus 发表于 2011-1-28 09:03:52
7# sas_user
宏里面的%put放到data步外面来,就是你要的结果
宏是先解析成SAS语句再执行的
Let them be hard, but never unjust

9
sas_user 发表于 2011-1-28 12:51:09
明白了,多谢。

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-5 21:11