使用 SAS 计算市场加权 return

calculate market weighted return using SAS

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

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

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

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

许多 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 告诉进程 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.