[英]calculate market weighted return using SAS
我有四個變量Name
, Date
, MarketCap
和Return
。 Name
是公司名稱。 Date
是時間戳。 MarketCap
顯示了公司的規模。 Return
是它在Date
返回。
我想創建一個額外的變量MarketReturn
,它是每個時間點市場的價值加權回報。 對於每天t,MarketCap加權回報=總和[return(i)*(MarketCap(i)/ Total(MarketCap)](return(i)是公司i在第t天返回)。
我這樣做的方式非常低效。 我想必須有一些功能可以很容易地在SAS中實現這個目標,所以我想問一下是否有人可以改進我的代碼。
步驟1:按date
排序數據步驟2:計算每天的總市場價值TotalMV
= sum( TotalMV
)。 步驟3:計算權重為每個公司(重量= MarketCap
/ TotalMV
)步驟4:創建一個新的變量“貢獻” =返回*重量為每個公司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
告訴proc,對Return
任何加權計算都應使用MarketCap
作為權重。
最后, OUTPUT
語句指定要將結果寫入的數據集(使用OUT
選項),並指定將Return
的平均值計算為MarketReturn
。
使用PROC SUMMARY
可以做很多很多事情。 PROC SUMMARY
的文檔很少,但僅僅因為它與PROC MEANS
幾乎完全相同,並且SAS不希望為兩者生成大部分相同文檔的大量內容。 以下是SAS 9.4 PROC MEANS
文檔的鏈接 。 兩個PROCS之間的主要區別是, SUMMARY
只輸出到數據集,而MEANS
默認輸出到屏幕上。 如果您想立即在屏幕上看到結果,請嘗試PROC MEANS
。
OUTPUT
語句中的MEAN
關鍵字來自SAS的統計關鍵字列表, 這里有一個有用的參考 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.