现有一段select statement的代码,想用macro和循环写得更简洁些:
select;
when (price > midpoint0) sign=1;
when (price < midpoint0) sign=-1;
when (symbol ne lagsymbol1) sign=1;
when (price > lagprice1) sign=1;
when (price < lagprice1) sign=-1;
when (symbol ne lagsymbol2) sign=1;
when (price > lagprice2) sign=1;
when (price < lagprice2) sign=-1;
when (symbol ne lagsymbol3) sign=1;
when (price > lagprice3) sign=1;
when (price < lagprice3) sign=-1;
when (symbol ne lagsymbol4) sign=1;
when (price > lagprice4) sign=1;
when (price < lagprice4) sign=-1;
(略)
when (symbol ne lagsymbol50) sign=1;
when (price > lagprice50) sign=1;
when (price < lagprice50) sign=-1;
otherwise sign=0;
end;
我初步试过这样写:
%macro lr(counter);
%do d=1 %to &counter;
when (symbol ne lagsymbol&d ) sign=1;
when (price > lagprice&d ) sign=1;
when (price < lagprice&d ) sign=-1;
%end;
%mend;
select;
when (price > midpoint0) sign=1;
when (price < midpoint0) sign=-1;
%lr(50);
otherwise sign=0;
end;
但是总是报错,说%lr(50)那里expecting WHEN, OTHERWISE or END。也就是说在select statement内部无法激活这个macro。那请问各位大大,有没有别的办法来优化我原本的代码呢?