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;
同样,它需要添加一个“最终”行,以便执行您想要的操作—它不会超过最后观察到的行;但如果这是需要的话,这似乎并不困难。如果你有固定的时间间隔,我会在这里使用第二种方法,如果你的时间间隔不固定,我会使用其他任何一种方法(如果需要的话,添加一个最终的观察结果)