SAS:如何从低频时间序列转换为高频时间序列
例如:SAS:如何从低频时间序列转换为高频时间序列,sas,time-series,Sas,Time Series,例如: date value 1/1/1990 1 1/1/1991 2 因此,我想要的是 date value 1/1/1990 1 2/1/1990 1 3/1/1990 1 ... 1/1/1991 2 2/1/1991 2 3/1/1991 2 ... 我已经研究了PROC EXPAND过程,但它没有达到我的要求。不知道如何以有效的方式做像这样简单的事情 谢谢您应该能够使用PROC EXPAND完
date value
1/1/1990 1
1/1/1991 2
因此,我想要的是
date value
1/1/1990 1
2/1/1990 1
3/1/1990 1
...
1/1/1991 2
2/1/1991 2
3/1/1991 2
...
我已经研究了PROC EXPAND
过程,但它没有达到我的要求。不知道如何以有效的方式做像这样简单的事情
谢谢您应该能够使用PROC EXPAND完成此操作,但在数据步骤中也很简单
data want;
merge have have(firstobs=2 rename=(date=last_date) keep=date);
if not missing(last_date) then do date=date to (last_date-1);
output;
end;
keep date value;
run;
这是一种前瞻性合并,将数据集合并到自身,并从顶部删除一行
它不适用于最后一行,除非您a)添加了额外的最后一行,或者b)编写了专门应用于最后一行的规则
如果您总是将行从一年中的第一行转换为一年中的最后一行,那么它也可能比这更容易编写
data want;
set have;
do date = date to intnx('Year',date,1,'s');
output;
end;
run;
要使用PROC EXPAND执行此操作,请执行以下操作:
proc expand data=have out=want from=year to=day method=aggregate;
id date;
run;
同样,它需要添加一个“最终”行,以便执行您想要的操作—它不会超过最后观察到的行;但如果这是需要的话,这似乎并不困难。如果你有固定的时间间隔,我会在这里使用第二种方法,如果你的时间间隔不固定,我会使用其他任何一种方法(如果需要的话,添加一个最终的观察结果)