Re: [問題] SAS每天算報酬的問題
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
11/23 15:34, 3F
推
11/23 15:56, , 4F
11/23 15:56, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):