楼主: sunnytree
14950 25

请教sas中的排序问题 [推广有奖]

11
BraveMadMan 发表于 2010-7-21 20:47:52
请问楼主,你sort数据后干嘛用?是为rank数据做准备吗?

不管用途如何,现有的数据结构非常不便于编程。建议楼主调整一下数据结构,建议采用 公司-时间 为行,变量为列的数据结构。具体可以参考CSMAR等的数据结构。
Don't get lost in technical details. What is the big picture?

12
sunnytree 发表于 2010-7-21 21:13:10
11# BraveMadMan

谢谢大家的讨论!

我是从wind上下载的数据,每一列代表一个基金在某个时间段内的收益率,每一行代表某一特定日期各个基金的收益率。

想做的事情是:

1、按照0101这一天的收益率对基金进行排序;

2、排序后将基金分成两组;

3、求这两组基金在0102和0103等其他日期的平均收益率。

如果考虑到后面两个步骤,不知哪种方法更适合?我上午用transpose试了试,但接下来的步骤就不知道如何往下了。可能再用call sortn来试试。

再次谢谢!

13
sunnytree 发表于 2010-7-21 21:24:30
补充一下,这里只是给的简单例子,实际的数据集涉及一百多个基金,一千多个交易日。每一年涉及的基金数目都不一样,因次上述提到的第二步基金分组不能简单用手工分。

14
BraveMadMan 发表于 2010-7-21 21:53:04
sunnytree 发表于 2010-7-21 21:13
11# BraveMadMan

谢谢大家的讨论!

我是从wind上下载的数据,每一列代表一个基金在某个时间段内的收益率,每一行代表某一特定日期各个基金的收益率。

想做的事情是:

1、按照0101这一天的收益率对基金进行排序;

2、排序后将基金分成两组;

3、求这两组基金在0102和0103等其他日期的平均收益率。

如果考虑到后面两个步骤,不知哪种方法更适合?我上午用transpose试了试,但接下来的步骤就不知道如何往下了。可能再用call sortn来试试。

再次谢谢!
你是要做momentum吗?

建议你先用proc transpose将数据转成 公司-日期 为行,变量为列的数据,不然后续操作很难。

建议你发点样本数据上来,这样别人好帮你。
Don't get lost in technical details. What is the big picture?

15
sunnytree 发表于 2010-7-22 01:26:33
我不是做momentum,兄弟,你也是学金融的?以后多交流。

实际数据集和我给出的例子类似,只是数据更多。

附件我给出了其中一年的数据,涉及17只基金,要分成五组。

16
BraveMadMan 发表于 2010-7-22 05:04:24
PROC IMPORT OUT= have
            DATAFILE= "c:\ret.xls"
            DBMS=EXCEL REPLACE;
     SHEET="have";
     GETNAMES=YES;
     MIXED=YES;
     USEDATE=YES;
     SCANTIME=YES;
RUN;

* Reshape data wide to long;
proc transpose data=have  out=have1 (rename=(col1=ret _name_=fund) drop=_label_);
by date;
run;

* Assign stocks to quintile portoflios (by date);
proc rank data=have1 out=have2 group=5;
  by date;
    var ret;
    ranks rk;
run;
data have2; set have2;
  by date;
  rk=rk+1;

* Assign base-date rankings to all dates;
proc sort data=have2 out=have3;        by fund date; run;
data have3; set have3;
  if date^=101 then rk=.; run;
data have3 (drop=rk);
retain fund date rank ret;
  set have3;
  by fund;
  retain rank;
  if first.fund then rank=rk;
run;

* Calculate average portfolio returns;
proc sql;
  create table rets_port as
  select date, rank, mean(ret) as ret        format 7.3
  from have3
  group by date, rank;
quit;
已有 1 人评分热心指数 收起 理由
jingju11 + 1 这长度,也值一分

总评分: 热心指数 + 1   查看全部评分

Don't get lost in technical details. What is the big picture?

17
wzw03 发表于 2010-7-22 11:04:37
在此一游!!!!答案不知

18
gjhgsdabd 发表于 2010-7-22 13:00:22
关注也更反对过~~

19
Isscaliu 发表于 2010-7-22 17:15:26
12# sunnytree
我可以理解为根据前一段时间的表现来追踪接下来的表现么?
很有意思的一个做法,在我看来,这样做有点象Bayesian!
可以具体介绍一下完成了三个步骤之后你想得出的什么的结果?
或者这样说,你想infer什么?你的inference是基于什么基础上的。
SAS我可帮不了什么,要是你喜欢的话,我倒是可以提供R来完成你想要的东西!
It was the best of times, it was the worst of times.

20
hanceland 发表于 2010-7-22 21:06:36
听着好像是三因素模型的估计。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-29 01:52