簡體   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