全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
5192 11
2016-04-26
The following SAS program is submitted:

%let Mv=shoes;
%macro PRODUCT(Mv=bicycles);
%let Mv=clothes;
%mend;

%PRODUCT(Mv=tents)
%put Mv is &Mv;

What is written to the SAS log?


A.
Mv is bicycles

B.
Mv is clothes

C.
Mv is shoes

D.
Mv is tents

答案是:C。

为什么题目改成

%letMv=shoes;

  %macro PRODUCT(td=bicycles);  

     %let Mv=clothes;  

     %let td=opp;

  %mend;     

  %PRODUCT(td=tents)   

  %put Mv is &Mv;


答案就是clothes呢? 区别在哪里啊???谢谢各位!



二维码

扫码加我 拉你入群

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

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

全部回复
2016-4-27 00:49:17
我来回答吧。 不知道对不对
要知道他的位置顺序 local, global

第一题:
里面都是在local,macro结束local就没了,就只有global=shoes 在。

第二题:是macro:shoes  td的都是local 然后clothes 会把shoes覆盖 因为一开始sas看没有local就去看有没有global 发现有一个global在外面那个

谢谢了!!!!
二维码

扫码加我 拉你入群

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

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

2016-4-27 09:15:27
当一个全局宏变量的名称已经存在时,
如果在某个宏内定义了相同名称的宏变量(不是用%LOCAL语句创建,也不是宏参数),
该操作只相当于对这个已经存在的全局宏变量重新进行了赋值。
二维码

扫码加我 拉你入群

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

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

2016-4-27 13:59:21
cccccccjjjjjjjj 发表于 2016-4-27 00:49
我来回答吧。 不知道对不对
要知道他的位置顺序 local, global
宏会先去找局部变量,然后再去找全局变量?

第一个程序:%let MV=shoes, 这个是全局变量,所以就不考虑局部变量了

第二个程序:%let MV=shoes; 这个不是全局变量么? 难道变成局部变量了?
二维码

扫码加我 拉你入群

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

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

2016-4-27 13:59:56
l1i2n3i4n5g 发表于 2016-4-27 09:15
当一个全局宏变量的名称已经存在时,
如果在某个宏内定义了相同名称的宏变量(不是用%LOCAL语句创建,也不 ...
请问你是在针对第二个程序么
二维码

扫码加我 拉你入群

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

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

2016-4-28 01:37:44
我也不明白这个问题。Adv pre guide(4th)P391:If the macro procesor receives either a %Let statement or a macro variablereference(&macro) in open code,it checks only the global symbol table for existence of the macro variable.
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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