繁体   English   中英

如何计算加权平均值但使用SAS排除对象本身

[英]how to calculate weighted average but exclude the object itself using SAS

我的数据集中有四个变量。 Company显示公司名称。 ReturnCompanyDate日的回报。 Weight是这家公司在市场中的权重。

我想保留原始文件中的所有变量,并创建一个附加变量,即市场回报(不包括Company本身)。 股票'a'对应的市场回报是市场上除股票a之外的所有加权股票在同一Date的回报之和。 例如,如果市场上有 3 只股票 a、b 和 c。 股票a的市场回报为回报(b)* [权重(b)/(权重(b)+权重(C))] +回报(C)* [权重(C)/(权重(b)+权重(C) )]. 同样,股票 b 的市场回报是 Return(a)* [Weight(a)/(weight(a)+weight(C))] + Return(C)* [weight(C)/(weight(a) )+重量(C)]。

我尝试使用 proc summary 但此函数在计算股票 a 的市场回报时不能排除股票 a。

PROC SUMMARY NWAY DATA  ; 
    CLASS Date ; 

    VAR Return / WEIGHT = weight;

    OUTPUT
       OUT = output
       MEAN (Return) = MarketReturn;
RUN;

谁能教我如何解决这个问题。 我对这个软件比较陌生,所以我不知道我是否应该使用循环或者可能有更好的选择。

这可以通过一些花哨的代数来完成。 不过,这不是内置的东西。

基本上:

  • 构建“总”市场回报
  • 通过股票收益构造股票(所以只是 A 的收益)
  • 减去 A 对总数的贡献。

多亏了生成这些列表的简单数学,做到这一点非常容易。

总和 =(( A*Awgt )+(余数平均值*它们的权重总和))/(Awgt 的总和 + 其余 wgts 的总和)

所以,解决这个问题(休息的平均值*休息 wgts 的平均值 / 休息 wgts 的总和)。

独占总和:((所有 wgts 的平均值 * 所有 wgts 的总和)-(A 的平均值 * A wgts 的总和))/(所有 wgts 的总和 - A wgts 的总和)

像这样的东西。

data returns;
  input stock $ return weight;
  datalines;
A .50 1
B .75 2
C .33 1
;;;;
run;

proc means data=returns;
  class stock;
  types () stock; *this is the default;
  weight weight;
  output out=means_out mean= sumwgt= /autoname;
run;

data returns_excl;
  if _n_=1 then set means_out(where=(_type_=0) rename=(return_mean=tot_return return_sumwgt=tot_wgts));
  set means_out(where=(_type_=1));
  return_excl = (tot_return*tot_wgts-return_mean*return_sumwgt)/(tot_wgts-return_sumwgt);
run;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM