我有以下代码来计算返回滚动窗口的偏度:
libname backup 'C:\Users\Anwender\Desktop\backup sas data';
data crsp_daily;
set backup.crsp_daily;
run;
proc sort data=crsp_daily;
by permno date;
run;
data crsp_daily1a;
set crsp_daily;
lastofmonth = last.month;
by permno year month;
run;
proc sql;
create table roll_ret as
select h2.permno, h2.Date, h1.retadj as lagret
from crsp_daily1a as h1,
crsp_daily1a as h2
where h1.permno = h2.permno
and intck("MONTH",h1.date,h2.date) between 0 and 11
group by h2.permno, h2.date
having count(h2.permno)>250 and h2.lastofmonth = 1
;
quit;
proc means data = roll_ret noprint;
by permno date;
var lagret;
output out=crsp_daily_final skew=skewRet kurt=KurtRet;
run;
输入数据集有一个每日日期变量,我已经构建了一个年月变量。它还有一个股票(permno)和每日回报(retadj)的ID。我想计算去年所有观察值的滚动偏度,但只有在这个窗口中至少有250个观测值。我只对本月末的结果感兴趣。
输入数据集已超过6000万!观察,上面的代码太慢了。我已经尝试使用视图而不是roll_view的数据集而没有改进。
如何针对这个非常大的数据集快速计算上述意义上的滚动偏度?
我的代码也会受到一般评论。
非常感谢!
答案 0 :(得分:1)
PROC SQL对潜在的连接策略执行启发式分析,您可以使用proc sql _method选项查看它。这里列出了潜在的用户优化策略(http://support.sas.com/techsup/technote/ts553.html)。可能你的案例属于小(h2)和大(h1)数据集的连接类别 - 在这种情况下,在键上创建索引通常会有所帮助。