全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1084 1
2016-09-18
现有一段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。那请问各位大大,有没有别的办法来优化我原本的代码呢?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2016-9-18 14:25:47
%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;
         otherwise;end;
%mend;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群