我觉得楼主没想对。
应该是,%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.
|