全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2501 4
2016-01-31
执行以下两段程序1.%let mv=shoes;                                                                                                                          
%macro product(td=bicycles);                                                                                                            
%let mv = clothes;                                                                                                                     
%let td = opp;                                                                                                                          
%mend;                                                                                                                                 
%product(td = tens)                                                                                                                     
%put mv is &mv;
结果:mv is clothes
2.%let mv=shoes;                                                                                                                          
%macro product(mv=bicycles);                                                                                                            
%let mv = clothes;                                                                                                                     
%mend;                                                                                                                                 
%product(mv = tens)                                                                                                                     
%put mv is &mv;   
结果:mv is shoes

请问能帮解释下结果吗?对于程序1,mv已经在宏定义之外定义了,在全局变量表中了,为什么结果还是clothes啊
谢谢啦
二维码

扫码加我 拉你入群

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

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

全部回复
2016-2-1 12:14:02
程序1 :
MV是global变量,因为MV已经存在了,在宏里面给MV赋值时,是把global 变量MV的值改变了,从shoes 变成了 clothes.

程序2:
在调用product这个宏时,做为参数传递的MV被定义为local变量。这时有两个MV变量,一个global,一个local。在宏里面对MV赋值时只是改变了local 的MV。最后程序%put时,显示是global 变量 的值,所以是shoes。你可以在宏里面加一句  %put mv is &mv, 这个显示结果是mv is clothes
二维码

扫码加我 拉你入群

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

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

2016-2-1 13:26:14
我个人理解是:对于globa的宏变量被赋值
在宏中仅可能因为宏变量形式的再赋值而会被改变

第二个宏中的同名宏变量已经被“抢注”为宏参数,而宏参数一定是local范围的,local的操作除了symputx,是无法改变到外界的(call symputx('x','new','g');),就如

复制代码

也是个人理解
二维码

扫码加我 拉你入群

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

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

2016-2-1 14:45:59
stayhungry05 发表于 2016-2-1 12:14
程序1 :
MV是global变量,因为MV已经存在了,在宏里面给MV赋值时,是把global 变量MV的值改变了,从shoes ...
多谢,明白了
二维码

扫码加我 拉你入群

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

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

2016-2-1 14:46:36
Tigflanker 发表于 2016-2-1 13:26
我个人理解是:对于globa的宏变量被赋值
在宏中仅可能因为宏变量形式的再赋值而会被改变
谢谢啦^_^
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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