我正在使用Stata,我有6年的每日回报,用于个人在其投资组合中持有的股票。我想将每日回报汇总到每月投资组合回报。在某些情况下,个人可能在投资组合中持有多个股票。我正在努力编写代码来执行此操作。
对于视觉,我的数据如下所示:
我希望结果如下:
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
的乘积。作为最后的手段,本月的平均回报可能有效。
答案 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
。