使用 SAS 计算市场加权 return
calculate market weighted return using SAS
我有四个变量 Name
、Date
、MarketCap
和 Return
。 Name
是公司名称。 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.
我有四个变量 Name
、Date
、MarketCap
和 Return
。 Name
是公司名称。 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.