You can use the cmovave transformation operation in PROC EXPAND:
proc expand data=have out=want; by zone; id time; convert demand = avg / transform=(cmovave 3); run;
If you want a pure DATA step approach, you can calculate a lag and lead, then divide. Attached is a program that will let you calculate leads efficiently.
%lead(data=have, out=have_lead, var=demand, by=zone); data want; set have_lead; by zone time; lag1_demand = lag(demand); /* Calculate the denominator and do not set lags for the first value of zone */ if(first.zone) then do; n = 1; lag1_demand = .; end; else n = 3 - nmiss(lag1_demand, lead1_demand); avg = sum(demand, lag1_demand, lead1_demand)/n; drop lag1_demand lead1_demand n; run;
Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.
Find more tutorials on the SAS Users YouTube channel.