SAS中的PROC UCM:如何在每日数据系列中指定星期几和一年中的季节性

时间:2016-01-03 08:05:40

标签: sas time-series forecasting

从2014年1月1日到2015年12月31日,我有2年的每日数据。我想使用此数据集预测接下来的365天。

*代码**

PROC UCM data=Mydata;                                                                                                                                                                                                                                      
id date interval=day; /*set the interval as day*/                                                                                                                                                                                                                                          
model Sold;
irregular;
level;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
slope ;                                                                                                                                                                                                                                                         
cycle period=365.24 rho=1 variance=0 noest=(rho period variance);                                                                                                                                                                                               
estimate;                                                                                                                                                                                                                                                       
forecast lead=365 OUTFOR=Ucmm.DATA;                                                                                                                                                                                                                             
run;

根据一周中的某一天和一年中的某个月存在趋势。我该如何指定?

我知道星期几它可以设置为7.对于月份,我该如何指定?有些月份有31天,有些月份有30天,而2月有28/29天。我该如何解决这个问题?我知道可以使用season;命令指定它。但是如何?

2 个答案:

答案 0 :(得分:0)

这是一个有趣的问题。为了快速解决,我建议在原始数据集中手动创建虚拟变量,您可以将其指定为输入变量。我确信有更好和更先进的方法可以使用seasonsplineseason语句来实现更好的估算,但与其他ETS过程相比,我没有使用过这个特定的过程。

data want;
    set have;
    array month[*] Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov;
    do i = 1 to dim(month);
         month[i] = (month(date) = i);
    end;

    drop i;
run;


proc ucm data=want;
     model Sold = Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov;
       irregular;
       level;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
       slope ;                                                                                                                                                                                                                                                         
       cycle period=365.24 rho=1 variance=0 noest=(rho period variance);                                                                                                                                                                                               
       estimate;                                                                                                                                                                                                                                                       
       forecast lead=365 OUTFOR=Ucmm.DATA;                                                                                                                                                                                                                             
run;

答案 1 :(得分:0)

月份虚拟变量的替代选项:Proc UCM有一个名为BLOCKSEASON的单独语句,位于SEASON语句之上。您可以为一周中的某一天指定7个季节,然后将365.24 / 12指定为块。