|
|
楼主

楼主 |
发表于 2010-5-11 20:32:22
|
只看该作者
SQL程序求救!
我有两个dataset:aq (variable: gvkey, datadate), cdsall (variable: gvkey, date, cds), 对应aq中的每一个observation,我想要前面第3、2、1个quarter,之后1个quarter,以及这4个quarter的cds的mean和median。
我的程序如下:
[code:28ryjsps]
proc sql;
create table aqlist as
select b.*, intnx('quarter', b.datadate, -3, 'sameday') as startdate format date9.,
intnx('quarter', b.datadate, -2, 'sameday') as twoqdate format date9.,
intnx('quarter', b.datadate, -1, 'sameday') as oneqdate format date9.,
intnx('quarter', b.datadate, 1, 'sameday') as enddate format date9.
from gvkeylist a, aq b
where b.gvkey=a.gvkey;
quit;
proc sql;
create table combine1 as
select a.*,
(select avg(b.cds) from cdsall b where a.gvkey=b.gvkey and a.startdate<=b.date<a.twoqdate) as avCDS_b3,
(select median(b.cds) from cdsall b where a.gvkey=b.gvkey and a.startdate<=b.date<a.twoqdate) as meCDS_b3,
(select avg(b.cds) from cdsall b where a.gvkey=b.gvkey and a.twoqdate<=b.date<a.oneqdate) as avCDS_b2,
(select median(b.cds) from cdsall b where a.gvkey=b.gvkey and a.twoqdate<=b.date<a.oneqdate) as meCDS_b2,
(select avg(b.cds) from cdsall b where a.gvkey=b.gvkey and a.oneqdate<=b.date<a.datadate) as avCDS_b1,
(select median(b.cds) from cdsall b where a.gvkey=b.gvkey and a.oneqdate<=b.date<a.datadate) as meCDS_b1,
(select avg(b.cds) from cdsall b where a.gvkey=b.gvkey and a.datadate<=b.date<a.enddate) as avCDS_a1,
(select median(b.cds) from cdsall b where a.gvkey=b.gvkey and a.datadate<=b.date<a.enddate) as meCDS_a2,
(select avg(b.cds) from cdsall b where a.gvkey=b.gvkey and a.startdate<=b.date<a.enddate) as avCDS_y,
(select median(b.cds) from cdsall b where a.gvkey=b.gvkey and a.startdate<=b.date<a.enddate) as meCDS_y
from aqlist a;
quit;
[/code:28ryjsps]
kaka,不知道大家是否看晕了,第一段SQL没有问题,只是提取出我想要的那些gvkey,并设了每个时间段的起始日期。现在我的程序在第二段SQL运行不过去,总说error:subquery for multi rows? (貌似是这个提示) ,如果写个macro,把aqlist中每一个observation提出来运行第二个sql就可以,但是非常非常慢。现在我把求median的部分都去掉也可以运行,当然也很慢,现在20多分钟了还没出结果。
aqlist中有37xx个observations,cdsall里面比较有40多万个observations。有什么优化便捷的方法实现我想要的结果么?
谢谢! |
|