全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
11628 4
2014-05-02
悬赏 3 个论坛币 已解决
有个问题想求助一下。
某一pool数据,已求得n个商品期货品种n个月的月收益,
现在想每个月根据商品期货品种的收益大小进行排序,选出前四种和后四种商品期货,记录下其名称。
我已对数据进行转置,数据形式如下:列为商品期货名称,变量为月份,数据为收益

_name_ _2010N01N01_2010N02N01 ……
bl 123 45 …………
cv 345 43……
as 34 23 ……
bd 34 23 ……
…… 23 56 ……
我现在仅可写出一个月的排序代码,如下:proc sort data=futures.finished out=c;
by _2010N01N01;
run;
data c1;
set c;
retain t 0;
if _2010N01N01^='.' then t=t+1;
if 0<t and t<=4 then min=_name_;
run;
proc sort data=futures.finished out=d;
by descending _2010N01N01;
run;
data d1;
set d;
if _n_<=4 then max=_name_;
run;

但如上图,我有很多月份的数据,如果对每个月都依次写出代码运行很麻烦,有没有办法可以一次性解决所有月份的运算。

最佳答案

二维码

扫码加我 拉你入群

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

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

全部回复
2014-5-2 16:44:33
fxx2010 发表于 2014-5-2 20:44
其实我想写的是一个动量策略的代码。我想对以上的数据进行排序,选出前四和后四个商品期货,然后持有前四 ...
复制代码
二维码

扫码加我 拉你入群

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

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

2014-5-2 17:42:30
给出一个你要的报表的最终格式。。
二维码

扫码加我 拉你入群

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

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

2014-5-2 19:57:06
不是太清楚你最终要什么样的结果,批量处理的话你可以结合宏试试
二维码

扫码加我 拉你入群

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

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

2014-5-2 20:44:44
jeozu 发表于 2014-5-2 17:42
给出一个你要的报表的最终格式。。
其实我想写的是一个动量策略的代码。我想对以上的数据进行排序,选出前四和后四个商品期货,然后持有前四种期货,卖出后四种期货,构建投资组合。
所以我需要的是先对某个月的数据排序,如上,用max数据集和min数据集选出前四个后四个商品期货,然后用sql,用max和min选出另一个收益数据集中对应月份对应品种期货的收益率。

proc sort data=return1.finished out=c;/*选择前四种和后四种商品期货*/
by _2010N01N01;
run;
data c1;
set c;
retain t 0;
if _2010N01N01^='.' then t=t+1;
if 0<t and t<=4 then min=_name_;
if min='' then delete;
keep min;
run;
proc sort data=return1.finished out=d;
by descending _2010N01N01;
run;
data d1;
set d;
if _n_<=4 then max=_name_;
if max='' then delete;
keep max;
run;
data e;
set return1.finished;
keep _name_ _2010N02N01;
run;
proc sql;
create table min as
select * from c1 ,e
where c1.min=e._name_;
quit;
proc means data=min noprint;
var _2010N02N01;
output out=min1 mean=mean;
quit;
proc sql;
create table max as
select * from d1,e
where d1.max=e._name_;
quit;
proc means data=max noprint;
var _2010N02N01;
output out=max1 mean=mean;
quit;
data full;
set min1 max1;
t=mean-lag(mean);
if t='.' then delete;
run;

但是这是一次动量的结果,最后只有一个结果,即一个观测值。我需要的是批量依次对每个月实施动量策略的结果,所以最后得出的结果应该是一列数据,即一系列观测值。

求指教,谢谢
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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