SAS前瞻性移动标准差
大家好,有人知道如何计算每个季度接下来四个季度的标准差吗?谢谢: 我的尝试如下: date1是一年中该季度的sas日期SAS前瞻性移动标准差,sas,Sas,大家好,有人知道如何计算每个季度接下来四个季度的标准差吗?谢谢: 我的尝试如下: date1是一年中该季度的sas日期 Proc sql ; create table th.totalroll as Select distinct permco, date1 , (select std(adjret) from th.returns1 where qtr between intnx('quarter',qtr(date),0) and intnx('quarter',
Proc sql ; create table th.totalroll as
Select distinct permco, date1 ,
(select std(adjret) from th.returns1 where qtr between
intnx('quarter',qtr(date),0) and intnx('quarter', qtr(date),+3)) as
TOTALroll From th.returns1 group by permco ,date1;
QUIT;
很难说你离得有多近,因为我不能完全确定你的数据是什么样子的,但这里有一个例子,假设你每个季度都有一个以上的日期。创建示例数据:
data have;
format date date9.;
do m = 1 to 128;
date = intnx('month','01JAN2008'd,m-1);
amount = round(ranuni(date)*10);
output;
end;
drop m;
run;
使用proc sql创建四分之一变量您可能已经有了这个变量?并按此变量分组。使用having子句将结果限制在每个季度的第一个日期
proc sql;
create table want as
select
yyq(year(t1.date),qtr(t1.date)) as quarter format=yyq.,
(select std(t2.amount)
from have t2
where t2.date >= yyq(year(t1.date),qtr(t1.date))
and t2.date < intnx('quarter',yyq(year(t1.date),qtr(t1.date)),4)) as stddev
from
have t1
group by
calculated quarter
having
t1.date = min(t1.date)
;
quit;
您应该能够对其进行调整,以适用于您的数据。如果您的数据集已在季度中,则可以使用proc expand。比如说:
proc expand data=th.returns1
out=th.totalroll
from=quarter
to=quarter;
by permco date1;
id date;
convert adjret=TOTALroll / transformout=( MOVSTD 4 );
run;
别忘了先对数据进行排序。MOVSTD给出了向后移动的标准偏差。如果您想要向前移动的STD,您可能需要将输出流向后移动四分之一
proc expand的转换操作:
您是否拥有SAS/ETS许可证?如果是这样,那么PROC EXPAND可以为您计算这个值