【问题标题】:calculate market weighted return using SAS使用 SAS 计算市场加权回报
【发布时间】:2015-06-20 21:05:09
【问题描述】:

我有四个变量NameDateMarketCapReturnName 是公司名称。 Date 是时间戳。 MarketCap 显示公司的规模。 Return 是它在Date 的回归。

我想创建一个附加变量MarketReturn,它是市场在每个时间点的价值加权回报。对于每一天 t,MarketCap 加权回报 = sum [ return(i)* (MarketCap(i)/Total(MarketCap) ] (return(i) 是公司 i 在 t 日的回报)。

我这样做的方式非常低效。我想在SAS中一定有一些功能可以很容易地实现这个目标,所以我想问一下是否有人可以改进我的代码。

step1:按date对数据进行排序 step2:计算每天的总市值TotalMV = sum(MarketCap)。 step3:计算每个公司的权重(权重=MarketCap/TotalMV) step4:创建一个新变量'Contribution' = Return * weight for each company step5:每天总结Contribution。总和(贡献)

【问题讨论】:

    标签: sas


    【解决方案1】:

    许多 SAS PROC 都支持加权平均值。 PROC SUMMARY

    PROC SUMMARY NWAY DATA = my_data_set ; 
        CLASS Date ; 
    
        VAR Return / WEIGHT = MarketCap ;
    
        OUTPUT
           OUT = my_result_set 
           MEAN (Return) = MarketReturn
        ;
    RUN;
    

    NWAY 部分告诉 PROC,观察结果应仅按 CLASS 语句中所述的内容进行分组 - 它也不应提供未分组的总计等。

    CLASS Date 部分告诉 PROC 按日期对观察进行分组。使用CLASS 时无需对数据进行预排序。如果您改为使用BY Date,则必须进行预排序。使用BY 的唯一理由是,如果您的数据集非常大且自然有序,您可以获得一些性能。在大多数情况下坚持CLASS

    VAR Return / WEIGHT = MarketCap 告诉 proc 对 Return 的任何加权计算都应该使用 MarketCap 作为权重。

    最后,OUTPUT 语句指定将结果写入的数据集(使用OUT 选项),并指定计算Return 的均值,将写入MarketReturn

    您可以使用PROC SUMMARY 做很多很多事情。 PROC SUMMARY 的文档很少,但这仅仅是因为它与 PROC MEANS 几乎相同,并且 SAS 不想为两者生成大量几乎相同的文档。 Here is the link to the SAS 9.4 PROC MEANS documentation。两个PROCS的主要区别在于SUMMARY只输出到数据集,而MEANS默认输出到屏幕。如果您想立即在屏幕上看到结果,请尝试PROC MEANS

    OUTPUT 语句中的MEAN 关键字来自SAS 的统计关键字列表a helpful reference for which is here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多