全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1369 9
2014-07-14
我有如下类型数据....
a1   a2   a3   a4   a5   a6     b1   b2   b3   b4  b5   b6
3     6     4     5    7     4      0     1     0     1     1     0
6     7     9     9     7    4      1     0     1     1     0     0
3     9     6     5     6     3     0     0     0     0     1     0
5     7     5     3     5     2     1     1     0     0     0     1
4     6     5     6     6     7     0     0     1    0     1     0
7     9     4     9     4     7     0     1     0     1     0     0
2     5     2     4     2     8     0     0     0     0     0     1



其中a是价格,b是信号,只有0-1,1表示买入,0表示不操作

我想做的是,当bi为1时,生成一个ci,里面为ai向后10期的收益率,否则就是0,

例如,第一行里b2为1时,那么c2就等于[a2(第10行)-a2(第1行)]/a2(第一行)
请问如何操作......由于ai和bi有几百个.所以只列举一部分.....

二维码

扫码加我 拉你入群

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

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

全部回复
2014-7-14 16:00:52
一个问题:对于第一行,它的“向后10期”是第10行,还是第11行?

如果是第10行,楼主可以参考下面的代码:

%let num=6;
data wanted;
    set test nobs=nobs;
        array a(&num); array b(&num); array c(&num); array tmp(&num);
        if _N_<=nobs-9 then do;
        set test(firstobs=10 keep=a1-a&num rename=(a1-a&num=tmp1-tmp&num));
                do i=1 to &num;
                   c(i)=b(i)*((tmp(i)-a(i))/a(i));
                end;
        end;
        drop tmp: i;
run;
二维码

扫码加我 拉你入群

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

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

2014-7-14 16:09:08
data test1;set test1;retain id; id+1;run;
data test2;set test1; if _N_ >9;retain id;id+1;run;
proc sort data=test1;by id;run; proc sort data=test2;by id;run;
data test3(drop=id i lag1-lag6);merge test1 test2(keep=id a1-a6 rename=(a1=lag1 a2=lag2 a3=lag3 a4=lag4 a5=lag5 a6=lag6));by id;
array lag{*} lag1-lag6;
array a{*} a1-a6;
array b{*} b1-b6;
array c{*} c1-c6;
do i=1 to 6;
if b{i}=1 then c{i}=(lag{i}-a{i} )/a{i};
else c{i}=.;
end;
run;
二维码

扫码加我 拉你入群

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

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

2014-7-14 16:14:32
pobel 发表于 2014-7-14 16:00
一个问题:对于第一行,它的“向后10期”是第10行,还是第11行?

如果是第10行,楼主可以参考下面的代码 ...
定义不了数组....他显示
ERROR: 不能用以下名称定义数组,IF、SELECT、SUBSTR、INPUT、PUT、WHEN、WHILE、UNTIL 和 RETURN。


还有一个小问题.....我的变量名是a1 a3 a5 a7.....我用by2循环咋不行呢 - -?
二维码

扫码加我 拉你入群

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

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

2014-7-14 16:27:38
pobel 发表于 2014-7-14 16:00
一个问题:对于第一行,它的“向后10期”是第10行,还是第11行?

如果是第10行,楼主可以参考下面的代码 ...
我试了你的代码发现,最后9行数字不对。
二维码

扫码加我 拉你入群

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

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

2014-7-14 16:33:05
ilovekate 发表于 2014-7-14 16:27
我试了你的代码发现,最后9行数字不对。
是不是我变量名有问题....还有,我数据集里面有空值,为啥我运行不了
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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