SAS中文论坛
标题:
宏变量计算与逻辑判断
[打印本页]
作者:
shiyiming
时间:
2012-6-7 22:47
标题:
宏变量计算与逻辑判断
在如下的程序中,逻辑判断的条件并未满足,但是宏变量
的却参与了计算。如何以逻辑判断限制宏计算呢?
也就是,当条件满足时,才参与计算,条件不满足,就不计算。
请高手指点,非常感谢!
[code:gk1np5zz]
%let a=3;
%macro try;
proc iml;
b=6;
if b>9 then
do;
b=b+5;
%let a=%eval(&a+10);
end;
print b &a;
quit;
%mend;
%try;
[/code:gk1np5zz]
作者:
shiyiming
时间:
2012-6-8 08:44
标题:
Re: 宏变量计算与逻辑判断
呵呵,简单:因为两个编译器的执行的先后顺序不一样.你一定要用这种口味去实现,那么修改如下:
[code:35i1dooa]
%let a=3;
%macro try;
proc iml;
b=6;
if b>9 then
do;
b=b+5;
call symput('a',"%eval(&a+10)");
end;
print b (resolve('&a'));
quit;
%mend;
%try;
[/code:35i1dooa]
作者:
shiyiming
时间:
2012-6-16 10:26
标题:
Re: 宏变量计算与逻辑判断
%let的执行在任何sas language之间,后一个宏定义中的%let 改变了解a的值,而不管其他的SAS语句执行与否.
call symput根据条件定义宏变量的值.在引用a时,首先从local symbol table中取值.前面一个let产生的是global,后一个因为条件不合适,因而并不会产生宏变量
&a的值就会从gobal中取,为3.
作者:
shiyiming
时间:
2012-7-13 10:42
标题:
Re: 宏变量计算与逻辑判断
mark!!!
欢迎光临 SAS中文论坛 (http://www.mysas.net/forum/)
Powered by Discuz! X3.2