/* Double Moving Average Smoothing */ /* (Forecast Smoothing) */ new; cls; let data[12,1]= 23 25 36 31 26 28 48 36 31 42 53 43 ; t=seqa(1,1,rows(data)); library pgraph; graphset; _pltype=6; _plegctl=1; _plegstr="actual\000predicted"; title("Double Moving Average"); k=4; xy(t,data~dma(data,k)); proc dma(x,k); local n,m1,m2,m,i; n=rows(x); m1=zeros(n,1); m1[1]=x[1]; i=2; do while i<=n; if i<=k; m1[i]=sumc(x[1:i-1])/(i-1); else; m1[i]=sumc(x[i-k:i-1])/k; endif; i=i+1; endo; m2=zeros(n,1); m2[1]=m1[1]; i=2; do while i<=n; if i<=k; m2[i]=sumc(m1[1:i-1])/(i-1); else; m2[i]=sumc(m1[i-k:i-1])/k; endif; i=i+1; endo; m=m1*2-m2; retp(m); endp;