楼主: wen7014
4557 12

[问答] 请教SAS advance 题39 of 63 [推广有奖]

  • 0关注
  • 0粉丝

高中生

35%

还不是VIP/贵宾

-

威望
0
论坛币
41 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
421 点
帖子
16
精华
0
在线时间
16 小时
注册时间
2016-4-22
最后登录
2016-7-16

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

请教SAS advance

题39 of63
%let Mv=shoes;
%macro PORDUCT (Mv=bicycles);
     %let Mv=clothes;
%mend;
%PRODUCT (Mv=tents)
%put Mv is &Mv;

what is written to the SAS log?
答案是 Mv is shoes

比较
%let a =cat;
%macro animal;
   %let a = dog;
%mend;
%animal
%put a is &a;

what is written to SAS log?
a is dog

这两题有什么区别呢?我看了很久的资料还是不理解。 请高手指教! 谢谢!

二维码

扫码加我 拉你入群

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

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

关键词:ADVANCE advan VANCE ance Van clothes written animal shoes 资料

回帖推荐

920240553 发表于2楼  查看完整内容

运行以下的程序就可以看出究竟不同的原因在什么地方: 全局宏变量与局部宏变量的作用域不同。 在macro中未定义参数(也就是没有定义参数内局部宏变量),并且在macro中重新为全局宏变量赋值,其值依然是全局宏变量,且值为重新赋值后的值。 %let Mv=shoes;*全局宏变量; %put Mv1 is &Mv; %macro PRODUCT(Mv=bicycles);*局部宏变量(参数中定义的局部宏变量); %put Mv2 is &Mv; %let Mv=clothes;*局部宏变量(m ...

cindy2468 发表于4楼  查看完整内容

这两题的区别在于 %let Mv=clothes 是局部宏变量 而%let a=cat;是全局宏变量 因为%macro product (mv=bicycles);在macro中定义了mv是局部宏变量,因此接下来的let语句定义的mv都是局部宏变量。如果把这题改一下 %let Mv=shoses; %macro product; %let Mv=clothes; *这时let语句定义的为全局宏变量 %mend; %product; %put Mv is &Mv; 跑出来的结果为Mv is clothes
已有 1 人评分论坛币 收起 理由
aclyang + 40 精彩帖子

总评分: 论坛币 + 40   查看全部评分

沙发
920240553 发表于 2016-7-5 14:06:10 |只看作者 |坛友微信交流群
运行以下的程序就可以看出究竟不同的原因在什么地方:
全局宏变量与局部宏变量的作用域不同。
在macro中未定义参数(也就是没有定义参数内局部宏变量),并且在macro中重新为全局宏变量赋值,其值依然是全局宏变量,且值为重新赋值后的值。

%let Mv=shoes;*全局宏变量;
%put Mv1 is &Mv;
%macro PRODUCT(Mv=bicycles);*局部宏变量(参数中定义的局部宏变量);
     %put Mv2 is &Mv;
     %let Mv=clothes;*局部宏变量(macro程序体内定义的宏变量);
     %put Mv3 is &Mv;
%mend;
%product(Mv=tents);
%put Mv4 is &Mv;*全局宏变量;


Mv1 is shoes
Mv2 is tents
Mv3 is clothes
Mv4 is shoes



%let a =cat;*全局宏变量;
%put a1 is &a;
%macro animal;
   %put a2 is &a;
   %let a = dog;*注意:此处实际上仍为全局变量,只是给全局宏变量重新赋值而已,全局变量在宏内赋值,赋值能成功,且该变量依然为全局变量;
   %put a3 is &a;
%mend;
%animal;
%put a4 is &a;*全局变量,打印重新赋值后的值;


a1 is cat
a2 is cat
a3 is dog
a4 is dog

使用道具

藤椅
pobel 在职认证  发表于 2016-7-5 14:20:16 |只看作者 |坛友微信交流群
当SAS为一个宏变量赋值时,SAS会从里到外(即从最内层的Local Symbol Table一直到Global Symbol Table)查找该宏变量是否已经存在。如果SAS在某个位置找到了这个宏变量,就会执行赋值操作,查找的动作也随即停止。

前面的例子,修改的是PRODUCT这个宏里的一个局部宏变量;
后面的例子,animal这个宏里没有一个名字是A的local宏变量,所以SAS会修改外层的,也就是global的,宏变量A。

使用道具

板凳
cindy2468 发表于 2016-7-5 23:11:48 |只看作者 |坛友微信交流群
这两题的区别在于
     %let Mv=clothes 是局部宏变量
而%let a=cat;是全局宏变量
因为%macro product (mv=bicycles);在macro中定义了mv是局部宏变量,因此接下来的let语句定义的mv都是局部宏变量。如果把这题改一下
%let Mv=shoses;
%macro product;
%let Mv=clothes; *这时let语句定义的为全局宏变量
%mend;
%product;
%put Mv is &Mv;
跑出来的结果为Mv is clothes

使用道具

报纸
wen7014 发表于 2016-7-5 23:23:52 |只看作者 |坛友微信交流群
cindy2468 发表于 2016-7-5 23:11
这两题的区别在于
     %let Mv=clothes 是局部宏变量
而%let a=cat;是全局宏变量
也就是说 %macro product (mv=bicycles),括号内的这个mv决定了macro中是有局部宏变量的?如果括号内的MV变成其他的,就不会受影响,macro里的程序就没有局部宏变量?

使用道具

地板
cindy2468 发表于 2016-7-5 23:41:38 |只看作者 |坛友微信交流群
wen7014 发表于 2016-7-5 23:23
也就是说 %macro product (mv=bicycles),括号内的这个mv决定了macro中是有局部宏变量的?如果括号内的M ...
是的,可以这么理解。你可以在机器中跑一遍。

使用道具

7
cindy2468 发表于 2016-7-5 23:48:19 |只看作者 |坛友微信交流群
wen7014 发表于 2016-7-5 23:23
也就是说 %macro product (mv=bicycles),括号内的这个mv决定了macro中是有局部宏变量的?如果括号内的M ...
如果写成这样,macro里的mv也是局部宏变量
%let mv=shoes;
%macro product;
%local mv;
%let mv=clothes;
%mends;
%product;
%put mv is &mv;

使用道具

8
tsdxwwdz888 发表于 2016-7-6 12:30:06 来自手机 |只看作者 |坛友微信交流群
Niu

使用道具

9
pobel 在职认证  发表于 2016-7-6 12:39:58 |只看作者 |坛友微信交流群
wen7014 发表于 2016-7-5 23:23
也就是说 %macro product (mv=bicycles),括号内的这个mv决定了macro中是有局部宏变量的?如果括号内的M ...
括号里不是mv也一样会有局部宏变量,只是不会有“MV”这个局部宏变量。

%let Mv=shoes;
%macro PRODUCT(a=bicycles);
     %let a=clothes;
         %put _local_;
%mend;
%PRODUCT(a=tents)
%put Mv is &Mv;

使用道具

10
wen7014 发表于 2016-7-7 04:46:08 |只看作者 |坛友微信交流群
920240553 发表于 2016-7-5 14:06
运行以下的程序就可以看出究竟不同的原因在什么地方:
全局宏变量与局部宏变量的作用域不同。
在macro中未 ...
如果题目改为
%let Mv=shoes;
  %macro PRODUCT(td=bicycles);  
     %let Mv=clothes;  
     %let td=opp;
  %mend;      
  %PRODUCT(td=tents)   
  %put Mv is &Mv;
结果为什么是 Mv is clothes?  这里参数中定义的local macro variable 不同于global macro variable。
比较了这三种类型题,我可以理解为其实 这个宏参数在这里作用很大吗?影响作用域?

使用道具

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

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

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

GMT+8, 2024-4-25 14:15