使用SAS

时间:2015-06-16 01:49:26

标签: sas

我有四个变量NameDateMarketCapReturnName是公司名称。 Date是时间戳。 MarketCap显示公司的规模。 ReturnDate日返回的MarketReturn

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

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

第1步:按TotalMV排序数据 步骤2:计算每天的总市值MarketCap =总和(MarketCap)。 第3步:计算每家公司的权重(权重= TotalMV / Contribution) step4:创建一个新的变量' Contribution' =每个公司的回报*重量 第五步:每天总结Sendkeys。总和(分担)

1 个答案:

答案 0 :(得分:3)

许多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

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