作者alias (希望)
看板Statistics
标题Re: [问题] SAS每天算报酬的问题
时间Fri Nov 23 09:49:30 2007
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
1F:推 cicatrix:哈 感谢大人您的神来一笔 果然还需人一点阿^^ 11/23 15:33
2F:→ cicatrix:不过还是有点小疑问 11/23 15:34
3F:→ cicatrix:sas "FIRST"他知道是每天的first吗 11/23 15:34
4F:推 cicatrix:已经试过了 sas似乎可以辨认 感恩~~~ 11/23 15:56