首页 文章

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

提问于
浏览
-4

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

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

Data

我希望结果看起来像这样:

Results

如果个人2的1996年12月份的投资组合回报计算如下: 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 回答

  • 1

    您不是显示库存权重,而是显示所需的示例数据 . 您的变量 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 .

相关问题