Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

- Home
- /
- Analytics
- /
- Forecasting
- /
- SAS Exponential Smoothing

- RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Mute
- Printer Friendly Page

🔒 This topic is **solved** and **locked**.
Need further help from the community? Please
sign in and ask a **new** question.

- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content

Posted 05-10-2017 11:12 PM
(2984 views)

Hi,

I have the following dataset (Table A)

Factory | Item | Date | Actual_Demand

-------------------------------------------------------------

A | 1 |2013-05-01 | 21

-------------------------------------------------------------

A | 1 |2013-05-02 | 19

...... .... ................. .....

-------------------------------------------------------------

A | 1 |2017-04-30 | 15

...... .... ................. ......

So for each combination of 'Factory' and 'Item', we have got actual demand for 4 years.

And I want to forecast future demand by 'Factory' and 'Item' level. Use the first 3-year data as training, and the last year data for testing. And I want to try 'exponential smoothing' method. How could I write the code? Will 'Proc Esm' help?

Thank you!

1 ACCEPTED SOLUTION

Accepted Solutions

- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content

You can use the BACK= option in the PROC ESM statement to indicate the number of observations to withhold from the end of each series for model estimation. The BACK= value will be applied to each BY group defined by the combination of values of your FACTORY and ITEM variables. The LEAD= value specifies the number of multistep forecasts to compute and is relative to the BACK= specification. When the BACK= option is used, the multistep forecasts begin at observation (n - back ) within each BY group.

For simplicity, let's assume you have 4 years of monthly data rather than daily data and you want to withhold the last 12 months of historical data from each series (ie. BY group) . Suppose you then want multistep forecasts for these 12 values plus another year of forecasts. To do this, you can specify the following in PROC ESM:

```
proc esm data=factory back=12 lead=24 outfor=fcst outest=est outstat=stat
print=all plot=modelforecasts;
by factory item;
id date interval=month;
forecast demand / model=damptrend;
run;
proc print data=fcst;
run;
```

This fits a DAMPTREND model, but you can specify your desired exponential smoothing model via the MODEL= option in the FORECAST statement.

By default, PROC ESM does not produce any output, however, I added the PRINT=ALL option to display the Statistics of Fit computed over the first 36 observations used to estimate the model, and the Performance Statistics computed over the region defined by the BACK= option for each series. I also added the PLOT=MODELFORECASTS to view a plot of the one-step ahead predictions and multistep forecasts for each series.

You can apply this same concept to your daily data. Note that if your daily Factory data does not include values for Saturday and Sunday, then you can use INTERVAL=WEEKDAY in the ID statement rather than INTERVAL=DAY.

I hope this helps!

7 REPLIES 7

- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content

You can use the BACK= option in the PROC ESM statement to indicate the number of observations to withhold from the end of each series for model estimation. The BACK= value will be applied to each BY group defined by the combination of values of your FACTORY and ITEM variables. The LEAD= value specifies the number of multistep forecasts to compute and is relative to the BACK= specification. When the BACK= option is used, the multistep forecasts begin at observation (n - back ) within each BY group.

For simplicity, let's assume you have 4 years of monthly data rather than daily data and you want to withhold the last 12 months of historical data from each series (ie. BY group) . Suppose you then want multistep forecasts for these 12 values plus another year of forecasts. To do this, you can specify the following in PROC ESM:

```
proc esm data=factory back=12 lead=24 outfor=fcst outest=est outstat=stat
print=all plot=modelforecasts;
by factory item;
id date interval=month;
forecast demand / model=damptrend;
run;
proc print data=fcst;
run;
```

This fits a DAMPTREND model, but you can specify your desired exponential smoothing model via the MODEL= option in the FORECAST statement.

By default, PROC ESM does not produce any output, however, I added the PRINT=ALL option to display the Statistics of Fit computed over the first 36 observations used to estimate the model, and the Performance Statistics computed over the region defined by the BACK= option for each series. I also added the PLOT=MODELFORECASTS to view a plot of the one-step ahead predictions and multistep forecasts for each series.

You can apply this same concept to your daily data. Note that if your daily Factory data does not include values for Saturday and Sunday, then you can use INTERVAL=WEEKDAY in the ID statement rather than INTERVAL=DAY.

I hope this helps!

- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content

Hi,

Thank you! It is pretty clear and I appreciate.

If I would like to forecast 1-year daily data (assuming weekend has demand), shall I make some changes to theparameter of your code?

(Back, Lead, Interval)

`proc esm data=factory `**back=365** **lead=730 **outfor=fcst outest=est outstat=stat
print=all plot=modelforecasts;
by factory item;
id date **interval=day**;
forecast demand / model=damptrend;
run;

It seems error message shows: Back = 365 is greater than the number of Time Series Value Thanks

- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content

Hi Crubal,

I'm glad the information was helpful! Given your desired analysis and the frequency of your data, the revised code look look fine. I included the OUTEST= and OUTSTAT= options in case you wanted to create SAS data sets that contain the parameter estimates and fit statistics. If these are not needed, then you can omit these options. If you do not want the procedure to generate any output, then you can omit the PRINT= and PLOT= options as well. You likely will want a SAS data set that contains the actuals, forecasts, standard errors and confidence limits for each series. These are all included in the OUTFOR= data set.

I hope this helps!

DW

- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content

Hi DW,

Thank you, as you mentioned it works thanks for your recommendation! I did try on 'Proc Forecast' functon like below using Exponential Smoothing, will that

`proc forecast data=factory interval=day `

method = Expo

lead = 365

out = fcst outest=est
by factory item;
id date;
var demand;

where Date between '01MAY2013'd and '30APR2016'd;
run;

Will that result the same? And by the way, is there any change that I could make for the 'Method = ' part so that I could use empirical mean to represent future date demand?

Thanks!

- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content

Hi Crubal,

Regarding your question on PROC FORECAST, the ESM procedure optimizes the smoothing weights for the specified exponential smoothing model, but PROC FORECAST does not. Because of this, I would strongly encourage you to use PROC ESM rather than PROC FORECAST. (The FORECAST procedure is considered to be obsolete.)

If you want to fit an ESM where the multistep ahead forecasts are constant, then you might want to use the MODEL=SIMPLE on the FORECAST statement in PROC ESM. For this model, the multistep forecasts equal the final smoothed value of the Level component. For more details on the models supported by PROC ESM, please see the following documentation link:

I hope this helps!

DW

- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content

Hi DW,

Thanks! I will take a look at the link.

By the way, using 'Proc ESM' and model = damptrend, future demand always gets the same, is it always the case from 'Exponential Smoothing' point of view?

Thank you!

Chenxi

- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content

Hi Chenxi,

If you specify the MODEL=DAMPTREND option in PROC ESM, then the LEAD= forecast will not always be the same. The behavior you observed is entirely data dependent. I suspect the final smoothed trend for your data approximates 0. To see the final smoothed trend, you can modify the PRINT= option in your code from PRINT=ALL to PRINT=(ALL STATES). See also the k-step prediction equation for the Damped-Trend Linear Exponential Smoothing model in the link provided in my earlier reply for details on how the multistep forecasts are produced.

I hope this helps!

DW

Registration is open! SAS is returning to Vegas for an AI and analytics experience like no other! Whether you're an executive, manager, end user or SAS partner, SAS Innovate is designed for everyone on your team. Register for just $495 by 12/31/2023.

**If you are interested in speaking, there is still time to submit a session idea. More details are posted on the website. **

Multiple Linear Regression in SAS

Learn how to run multiple linear regression models with and without interactions, presented by SAS user Alex Chaplin.

Find more tutorials on the SAS Users YouTube channel.