SAS中文论坛

标题: 关于求standard deviation的问题 [打印本页]

作者: shiyiming    时间: 2009-12-15 17:22
标题: 关于求standard deviation的问题
我有一个dataset。
其中variable有:com,date,ret
对应每一个com,有很多天的ret数据,我想求对应每个com每一天的前180天的ret的standard deviation。
也就是com date ret std,这个std是这个date前180个数据的standard deviation。

请指教怎么做比较快捷?

谢谢!
作者: shiyiming    时间: 2009-12-15 21:52
标题: Re: 关于求standard deviation的问题
我记得曾经有人问过很类似的问题,大概是30天作一次总结。不妨翻看一下。
作者: shiyiming    时间: 2009-12-16 09:52
标题: Re: 关于求standard deviation的问题
可以用SQL   也可以从STDV的数学公式将D转换成期望E的组合 来进行计算
作者: shiyiming    时间: 2009-12-16 10:27
标题: Re: 关于求standard deviation的问题
我也记得有人问过,不过我search了半天没找到。

因为数据量比较多,1000左右com,date也有7年的,我自己写了一个macro貌似不对,花了30分钟才run了十个,结果还很奇怪。想问问大虾们有什么好的算法。

[quote="jingju11":1bjqvyqm]我记得曾经有人问过很类似的问题,大概是30天作一次总结。不妨翻看一下。[/quote:1bjqvyqm]
作者: shiyiming    时间: 2009-12-16 10:29
标题: Re: 关于求standard deviation的问题
举个例子?

谢谢!

[quote="damashaladi":31rqzpof]可以用SQL   也可以从STDV的数学公式将D转换成期望E的组合 来进行计算[/quote:31rqzpof]
作者: shiyiming    时间: 2009-12-16 10:54
标题: Re: 关于求standard deviation的问题
参见jingju11的回帖
[url:12twduhx]http://www.mysas.net/forum/viewtopic.php?f=4&t=5835&p=19701#p19680[/url:12twduhx]
作者: shiyiming    时间: 2009-12-16 11:03
标题: Re: 关于求standard deviation的问题
就是我问的,JINGJU用数组的方法很好恨强大,或者用期望的公式也可以:
[code:gvm8hjok]x+ret**2;
y+ret;
stdv180= sqrt ( (x - lag181( t1 ) - (y -lag181y ) ** 2 / 181 ) / 180));[/code:gvm8hjok]
作者: shiyiming    时间: 2009-12-16 11:42
标题: Re: 关于求standard deviation的问题
大家看看我的程序,给提点意见,我总共有50万个observations,如何更有效率一些。
简要说明一下,nacdslink2是我的data,crsp.dsf是服务器上股票数据,我的data日期是不连续的,我只要我的data中日期的前180天的股票ret的standard deviation。
这个程序里面我用的是我的日期前的180天,实际上我想要的是我的日期前在crsp里的180个trading day,也就是180个数据,不过我没想出怎么写好。
大家给看看什么方法更有效率一些?谢谢!
[code:3k3w94yq]
libname d '/home/dengzi';
libname a "/sastemp12/dengzi";

data stock.volatility;
run;

%macro volatility;
%do i = 1 %to 504089;
%put &i;

data a.temp1;
        set d.nacdslink2;
        if _N_=&i;
run;

proc sql;
        create table a.temp2 as
        select a.*, b.date, abs(b.prc) as price, b.ret
        from a.temp1 a, crsp.dsf b
        where a.permno=b.permno and b.date<a.date and b.date>=intnx('day', a.date, -180) and abs(prc)>0
        order by permno, date;
quit;

proc means data=a.temp2 noprint;
        var ret;
        output out=a.temp3 std=volatility;
run;

data a.temp3;
        merge a.temp1 a.temp3(keep=volatility);
run;

data d.volatility;
        set d.volatility a.temp3;
run;

%end;
%mend;
%volatility;
run;

[/code:3k3w94yq]
作者: shiyiming    时间: 2009-12-16 13:44
标题: Re: 关于求standard deviation的问题
我的老同学附体的凳子,使用宏基本上是最差答案。
作者: shiyiming    时间: 2009-12-16 13:55
标题: Re: 关于求standard deviation的问题
[quote="死猪头":32jcgpah]我的老同学附体的凳子,使用宏基本上是最差答案。以下例子为求前180个全国性交易日汇报的另外在IML里应该能写出更清楚的程式,但窃以为会慢一些。唉,说来说去你只是个假凳子。[/quote:32jcgpah]

咳咳,谢谢哈,原来这个id也这么popular。
作者: shiyiming    时间: 2009-12-16 14:18
标题: Re: 关于求standard deviation的问题
大虾们太牛了!!!

我以后不玩macro了,这个数组居然在我的笔记本上就用了22秒就完成了!
作者: shiyiming    时间: 2009-12-16 15:29
标题: Re: 关于求standard deviation的问题
proc expand,移动标准差
作者: shiyiming    时间: 2009-12-16 20:22
标题: Re: 关于求standard deviation的问题
[quote="死猪头":1g85mn5c]我的老同学附体的凳子,使用宏基本上是最差答案。以下例子为求前180个全国性交易日汇报的标准差:
[code:1g85mn5c]
data sidengzi1;
        array a[0:179] _temporary_;
        do _n_=1 by 1 until(last.symbol);
                set dengzi;
                by symbol;
                [/code:1g85mn5c]
另外在IML里应该能写出更清楚的程式,但窃以为会慢一些。唉,说来说去你只是个假凳子。[/quote:1g85mn5c]

切~还说自己英语不行~ <!-- s:lol: --><img src="{SMILIES_PATH}/icon_lol.gif" alt=":lol:" title="Laughing" /><!-- s:lol: -->




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2