Sas VARMAX中缺少值

Sas VARMAX中缺少值,sas,forecasting,Sas,Forecasting,我有一个包含游客和天气变量的数据集。我试图根据天气变化预测游客。由于数据集仅包括季节性游客,因此每年都缺少值和差距。在sas中运行proc reg时,一切正常,但在使用proc VARMAX时会出现问题。由于缺少值,我无法运行回归。我如何处理这个问题 proc varmax data=tivoli4 printall plots=forecast(all); id obs interval=day; model lvisitors = rain sunshine averagetemp dfeb

我有一个包含游客和天气变量的数据集。我试图根据天气变化预测游客。由于数据集仅包括季节性游客,因此每年都缺少值和差距。在sas中运行proc reg时,一切正常,但在使用proc VARMAX时会出现问题。由于缺少值,我无法运行回归。我如何处理这个问题

proc varmax data=tivoli4 printall plots=forecast(all);
id obs interval=day;
model lvisitors = rain sunshine averagetemp
dfebruary dmarch dmay djune djuly daugust doctober dnovember ddecember
dwednesday dthursday dfriday dsaturday dsunday
d_24Dec2016 d_05Dec2013 d_24Dec2017 d_24Dec2014 d_24Dec2015 d_24Dec2019 
d_24Dec2018 d_24Sep2012 d_06Jul2015
d_08feb2019 d_16oct2014 d_15oct2019 d_20oct2016 d_15oct2015 d_22sep2017 d_08jul2015
d_20Sep2019 d_08jul2016 d_16oct2013 d_01aug2012 d_18oct2012 d_23dec2012 d_30nov2013 d_20sep2014 d_17oct2012 d_17jun2014
dFrock2012 dFrock2013 dFrock2014 dFrock2015 dFrock2016 dFrock2017 dFrock2018 dFrock2019
dYear2015 dYear2016 dYear2017
/p=7 q=2 Method=ml dftest;
garch p=1 q=1 form=ccc OUTHT=CONDITIONAL;
restrict
ar(3,1,1)=0, ar(4,1,1)=0, ar(5,1,1)=0,
XL(0,1,13)=0, XL(0,1,14)=0, XL(0,1,13)=0, XL(0,1,27)=0, XL(0,1,38)=0, XL(0,1,42)=0;
output lead=10 out=forecast;

运行

与任何预测一样,您首先需要准备时间序列。您应该首先通过
PROC TIMESERIES
运行数据,以填充或插补缺失的值。最合适的插补选择取决于您的变量。以下代码将:

  • 按天对lvisitor进行求和,并将缺少的值设置为0
  • averagetemp
    的缺失值设置为average
  • rain
    sunshine
    的缺失值以及以
    d
    开头的变量设置为0(假设这些是指标)
代码:

重要的时间间隔考虑事项

根据你的数据,这可能会使你的错误率和估计产生偏差,因为你总是知道在淡季没有人在场。如果淡季数据缺少许多值,则需要删除这些行

由于PROC VARMAX不支持自定义时间间隔,因此可以创建一个简单的时间标识符。您也可以选择在末尾转换
proc format
time\u id

data want;
    set have;

    time_id+1;
run;

proc varmax data=want;
    id time_id interval=day;
    ...
    output lead=10 out=myforecast;
run;

data myforecast;
    merge myforecast
          want(keep=time_id date)
    ;

    by time_id;
run;
或者,如果您制作了格式:

data myforecast;
    set myforecast;

    date = put(time_id, timeid.);
    drop time_id;
run;

您好,非常感谢您的回复!似乎无法在proc varmax中使用自定义间隔。我们如何做到这一点?是否有可能从第二季度到第四季度的间隔天数?那么,在这种情况下,代码是什么?
data myforecast;
    set myforecast;

    date = put(time_id, timeid.);
    drop time_id;
run;