楼主: 2oo8
17680 17

[问答] 关于宏变量使用%let赋值后,用%put输出结果的疑问 [推广有奖]

11
菜花的秘密 发表于 2016-10-23 10:31:40
谢谢楼主!

12
mklyzl 发表于 2017-2-19 21:43:35
楼主辛苦,明白了局部与全局宏变量,学到很多!

13
mklyzl 发表于 2017-2-19 21:48:34
吕小布韦 发表于 2016-6-22 17:56
用%put &a不好确定显示的宏变量, 建议macr里外都用 %put _user_, 这样你能搞清楚到底显示的是哪个宏变量的值 ...
这个很好,可以直观看到

14
mklyzl 发表于 2017-2-19 21:48:37
吕小布韦 发表于 2016-6-22 17:56
用%put &a不好确定显示的宏变量, 建议macr里外都用 %put _user_, 这样你能搞清楚到底显示的是哪个宏变量的值 ...
这个很好,可以直观看到

15
sherry123 发表于 2017-2-20 06:51:45
我觉得楼主没想对。
应该是,%let 在macro program 里面的时候,如果local variable a 存在了(例子2,5),%let 就是local的。如果local没有, 就去改变global 的值。也就是说,在macro 里面的let 没准儿,最好加code: %GLOBAL a;


470  %*例子 1 ;
471  %let a=cat;
472  %macro animal;
473  %let a=dog;
474  %put globol: %symglobl(a);
475  %put local: %symlocal(a);
476  %mend;
477  %animal
MLOGIC(ANIMAL):  Beginning execution.
MLOGIC(ANIMAL):  %LET (variable name is A)
MLOGIC(ANIMAL):  %PUT globol: %symglobl(a)
globol: 1
MLOGIC(ANIMAL):  %PUT local: %symlocal(a)
local: 0
MLOGIC(ANIMAL):  Ending execution.
478  %put a is &a;
SYMBOLGEN:  Macro variable A resolves to dog
a is dog
479
480  %*例子2 ;
481  %let a=cat;
482  %macro animal(a=name);
483  %let a=dog;
484  %put globol: %symglobl(a);
485  %put local: %symlocal(a);
486  %mend;
487  %animal(a=dog1);
MLOGIC(ANIMAL):  Beginning execution.
MLOGIC(ANIMAL):  Parameter A has value dog1
MLOGIC(ANIMAL):  %LET (variable name is A)
MLOGIC(ANIMAL):  %PUT globol: %symglobl(a)
globol: 1
MLOGIC(ANIMAL):  %PUT local: %symlocal(a)
local: 1

MLOGIC(ANIMAL):  Ending execution.

16
userzht 发表于 2017-8-16 14:23:58
受教了受教了受教了受教了

17
jackhlucy 发表于 2018-3-9 11:24:09
回答的非常清楚,要弄清楚global macro variable 有没有被替代非常重要。谢谢楼主。

18
小洛vy 发表于 2018-5-27 15:28:13
感谢楼主,非常有帮助

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

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