将每日报表转换为Stata的月报表

时间:2014-03-20 21:39:41

标签: stata stock financial

我正在使用Stata,我有6年的每日回报,用于个人在其投资组合中持有的股票。我想将每日回报汇总到每月投资组合回报。在某些情况下,个人可能在投资组合中持有多个股票。我正在努力编写代码来执行此操作。

对于视觉,我的数据如下所示:

Data

我希望结果如下:

Results

1996年12月个人2的投资组合回报计算为:0.3 * 0.0031 + 0.7 * 0.0076 = 0.00625

我尝试了collapse命令,例如

collapse Return, by (ID Year Month)

但这并不能提供我在Excel中计算出的相同回报。

我可以使用

为所有日子进行加权投资组合回报
bysort ID year month: egen wt_return = stock_weight * monthly_return

但这给了我每日回报。我的麻烦是将它们汇总到相应月份的一个回报中。

至于细节,我想计算每月投资组合回报作为1 + the weighted daily returns的乘积。作为最后的手段,本月的平均回报可能有效。

1 个答案:

答案 0 :(得分:1)

您不会在1991年显示第2个人的每月投资组合回报。您的初始示例数据不显示股票权重,但是您需要的示例 数据呢。您的变量Monthly Return不可重现。发布时,您应该花时间验证您的问题是否清晰。 它应该是明确地向公众明确,而不仅仅是对你。

我没有费心检查你的计算是否正确但下面是我的 明白你想要的。该过程只是计算加权回报然后 由person year month个小组添加。 (我假设股票权重每天适用于股票,这是您的示例数据所暗示的。)

clear all
set more off

input ///
perid year month day str3 stockid return stockw
1 1991 1 1 "ABC" .01 1
1 1991 1 2 "ABC" .02 1
1 1991 1 3 "ABC" -.01 1
1 1991 1 31 "ABC" .004 1
1 1996 12 31 "ABC" .002 1
2 1991 1 1 "ABC" .01 .3
2 1991 1 2 "ABC" .02 .3
2 1996 12 31 "ABC" .004 .3
2 1991 1 1 "XYZ" .001 .7
2 1991 1 2 "XYZ" .004 .7
2 1996 12 31 "XYZ" .021 .7
end

* create weighted return
gen returnw = return * stockw

sort perid year month day
list, sepby(perid year month day)

* sum weighted returns by person, year, month
collapse (sum) returnw, by (perid year month)

list, sepby(perid)

如果您希望collapse求和,则必须使用(sum)进行指示(尽管我不清楚这是否是您想要的)。默认情况下,它计算平均值。完全阅读help collapse