l******h 发帖数: 855 | 1 %let a = cat;
%macro animal;
%let a = dog;
%mend;
%animal
%put a is &a;
答案是D: a is dog
为什么不是C: a is cat
当然我在SAS上运行过了,确实是D, 可是我的local 和global 宏变量老是搞不清楚呀
~ |
G********r 发帖数: 3161 | 2 唉哟,这位大哥大姐,这不是明摆着么:有两个%let语句,第二个在Macro里面的把外
面的那个给覆盖了呀。 |
l******h 发帖数: 855 | 3 谢你啊,这位大哥大姐, 这不是明白着么,我local和globel 没学好
【在 G********r 的大作中提到】 : 唉哟,这位大哥大姐,这不是明摆着么:有两个%let语句,第二个在Macro里面的把外 : 面的那个给覆盖了呀。
|
l******h 发帖数: 855 | 4 另外,SAS ADV中的第39题:
%let mv = shoes;
%macro product (mv = bicycles);
%let mv = clothes;
%mend;
%product(mv = tents)
%put mv is &mv;
却为什么又是shoes 了呢? |
y**x 发帖数: 117 | 5
当运行%animal中 %let a = dog;SAS现在animal的local中找a, 没有后又去global中去
找,有a, 于是就把global的a赋值dog.
【在 l******h 的大作中提到】 : %let a = cat; : %macro animal; : %let a = dog; : %mend; : %animal : %put a is &a; : 答案是D: a is dog : 为什么不是C: a is cat : 当然我在SAS上运行过了,确实是D, 可是我的local 和global 宏变量老是搞不清楚呀 : ~
|
y**x 发帖数: 117 | 6 注意mv是宏的参数。对于宏中的参数,sas总是会创建local表把这些参数声明在里面。
当运行到%let mv = clothes;犹豫local中有mv,所以就改变了local中mv的值。宏运行
结束后,local消失,global中的mv不受影响,依然是shoes.
【在 l******h 的大作中提到】 : 另外,SAS ADV中的第39题: : %let mv = shoes; : %macro product (mv = bicycles); : %let mv = clothes; : %mend; : %product(mv = tents) : %put mv is &mv; : 却为什么又是shoes 了呢?
|
l******h 发帖数: 855 | 7 才注意到你是刚刚也通过ADV的同学,恭喜呀~
【在 y**x 的大作中提到】 : 注意mv是宏的参数。对于宏中的参数,sas总是会创建local表把这些参数声明在里面。 : 当运行到%let mv = clothes;犹豫local中有mv,所以就改变了local中mv的值。宏运行 : 结束后,local消失,global中的mv不受影响,依然是shoes.
|
g**u 发帖数: 205 | 8 原来如此。
因为% macro animal时没有提到define animal(a),所以a是独立的macro variable。
【在 y**x 的大作中提到】 : 注意mv是宏的参数。对于宏中的参数,sas总是会创建local表把这些参数声明在里面。 : 当运行到%let mv = clothes;犹豫local中有mv,所以就改变了local中mv的值。宏运行 : 结束后,local消失,global中的mv不受影响,依然是shoes.
|