Re: [問題] SAS每天算報酬的問題

看板Statistics作者 (希望)時間18年前 (2007/11/23 09:49), 編輯推噓2(202)
留言4則, 1人參與, 最新討論串2/2 (看更多)
DATA sac 那一塊程式若改成以下: DATA sac2; INFILE 'C:\SAS.txt'; INPUT code $ price high low date ; if _n_=1 then delete; RUN; POOC SORT DATA=sac2; BY date; RUN; DATA sac; SET sac2; BY date; code = upcase(code); logprice = LOG10(price); return=DIF(logprice); volatility=return*return; IF FIRST.date THEN DO; volatility=0; return=0; END; RUN; PROC PRINT DATA =sac; RUN; 黃色部分:因為你不需要每個日期的第一個 volatility 和 return 所以就令它們為0 試試看吧, 看是不是你想要的 ※ 引述《cicatrix (SAS.VaR修行中...)》之銘言: : 今天自己寫了這樣的程式 : DATA sac; : INFILE 'D:\SAS.txt'; : INPUT code $ price high low date ; : if _n_=1 then delete; : code = upcase(code); : logprice = LOG10(price); : return=DIF(logprice); : volatility=return*return; : PROC PRINT DATA =sac; : RUN; : 以上這樣處理後 : 會產生 : code price high low date return vol : EWW 10 20 8 20050103 ln(10) {ln(10)}^2 : EWW 12 20 7 20050103 ln(12) {ln(12)}^2 : EWW 11 22 5 20050104 ln(11) {ln(11)}^2 : *SORT THE DATA; : PROC SORT DATA = sac ; : BY date; : RUN; : PROC PRINT DATA = sac; : BY date; : SUM volatility; : VAR code volatility; : proc means data=sac noprint; : var volatility ; : by date; : output out=sacc sum=sum ; : run; : proc print data=sacc; : run; : 最後會變成 : date volatility : 20050103 當天所有波動vol相加{78筆} : 20050104 當天所有波動vol相加{79筆} : 問題在於 每天如果是五分鐘的intraday資料 : 一天也只有79筆也就是說只能有78份return及vol{因為第一筆沒得減前一筆} : 20050103 的確是如此 : 但是問題在於20050104卻不是如此 : 因為第一筆可以減20050103最後一筆資料所以產生了79個return及vol : 請問這樣的問題可以用甚麼方式解決呢 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.76.175.139

11/23 15:33, , 1F
哈 感謝大人您的神來一筆 果然還需人一點阿^^
11/23 15:33, 1F

11/23 15:34, , 2F
不過還是有點小疑問
11/23 15:34, 2F

11/23 15:34, , 3F
sas "FIRST"他知道是每天的first嗎
11/23 15:34, 3F

11/23 15:56, , 4F
已經試過了 sas似乎可以辨認 感恩~~~
11/23 15:56, 4F
文章代碼(AID): #17HZ6heG (Statistics)
文章代碼(AID): #17HZ6heG (Statistics)