SAS:预测未来销售额的简单方法

SAS:预测未来销售额的简单方法,sas,predict,Sas,Predict,我有如下数据: > Data sales; > Infile datalines missover; > Input year $ month sales; > Datalines; > 2016 1 489 > 2016 2 475 > 2016 3 523 > 2016 4 546 > 2016 5 675 > 2016 6 667 > 20

我有如下数据:

>   Data sales;
>     Infile datalines missover;
>     Input year $ month  sales;
>     Datalines;
>     2016 1 489
>     2016 2 475
>     2016 3 523
>     2016 4 546
>     2016 5 675
>     2016 6 667
>     2016 7 334
>     2016 8 359
>     2016 9 521
>     2016 10 526
>     2016 11 459
>     2016 12 439
>     2017 1 500
>     2017 2 445
>     2017 3 531
>     2017 4 541
>     2017 5 620
>     2017 6 630
>     2017 7 300
>     2017 8 350
>     2017 9 502
>     2017 10 524
>     2017 11 402
>     2017 12 469
>     ;
我希望以去年的平均增长率为例,并用它来预测未来12个月的月度增长。我不是在寻找一种高级方法,这纯粹是为我编程

到目前为止,我得到的是这个(太难看了):


下面的代码回答了您的问题/您正在尝试做什么。 请注意,我使用了:

  • 保留方法而不是滞后函数
  • 而不是观察值 montonic()的
如果有大量记录,这将提高查询性能

请注意,您还可以根据移动平均值预测销售额,而不仅仅是差异(不包括在代码中)

基于您的销售数据集的代码:

/*Calculate the difference*/
data diff;
set sales;
row = _n_;
retain prev;
if row=1 then do; prev=0; diff=0; output; prev=sales;end;
else do; diff=sales -prev; output; prev=sales; end;
run;
/*select avg for 2016, for live data feed change to -1*/
proc sql noprint;
select avg(diff) into:avg from diff where input(year,4.)=year(today())-2;
quit;
/*select avg for 2017, for live data feed remove the -1*/
proc sql;
create table sales_new as
select year,month, sales, &avg as avg_diff, Sales+&avg as sales_pred from diff where input(year,4.)=year(today())-1;
quit;
差异表:

输出:

/*Calculate the difference*/
data diff;
set sales;
row = _n_;
retain prev;
if row=1 then do; prev=0; diff=0; output; prev=sales;end;
else do; diff=sales -prev; output; prev=sales; end;
run;
/*select avg for 2016, for live data feed change to -1*/
proc sql noprint;
select avg(diff) into:avg from diff where input(year,4.)=year(today())-2;
quit;
/*select avg for 2017, for live data feed remove the -1*/
proc sql;
create table sales_new as
select year,month, sales, &avg as avg_diff, Sales+&avg as sales_pred from diff where input(year,4.)=year(today())-1;
quit;

下面的代码回答了您的问题/您正在尝试做什么。 请注意,我使用了:

  • 保留方法而不是滞后函数
  • 而不是观察值 montonic()的
如果有大量记录,这将提高查询性能

请注意,您还可以根据移动平均值预测销售额,而不仅仅是差异(不包括在代码中)

基于您的销售数据集的代码:

/*Calculate the difference*/
data diff;
set sales;
row = _n_;
retain prev;
if row=1 then do; prev=0; diff=0; output; prev=sales;end;
else do; diff=sales -prev; output; prev=sales; end;
run;
/*select avg for 2016, for live data feed change to -1*/
proc sql noprint;
select avg(diff) into:avg from diff where input(year,4.)=year(today())-2;
quit;
/*select avg for 2017, for live data feed remove the -1*/
proc sql;
create table sales_new as
select year,month, sales, &avg as avg_diff, Sales+&avg as sales_pred from diff where input(year,4.)=year(today())-1;
quit;
差异表:

输出:

/*Calculate the difference*/
data diff;
set sales;
row = _n_;
retain prev;
if row=1 then do; prev=0; diff=0; output; prev=sales;end;
else do; diff=sales -prev; output; prev=sales; end;
run;
/*select avg for 2016, for live data feed change to -1*/
proc sql noprint;
select avg(diff) into:avg from diff where input(year,4.)=year(today())-2;
quit;
/*select avg for 2017, for live data feed remove the -1*/
proc sql;
create table sales_new as
select year,month, sales, &avg as avg_diff, Sales+&avg as sales_pred from diff where input(year,4.)=year(today())-1;
quit;

为什么投反对票?你原来的问题很清楚,不需要投反对票,我会投你的票。为什么投反对票?你原来的问题很清楚,不需要投反对票,我会投你的票。