/* Henderson's 7-term Moving Average */ new; cls; let data[50,1]= 60 61 60 62 60 63 64 65 69 70 69 66 64 64 62 64 65 55 53 57 60 58 63 63 63 68 69 69 68 69 70 67 66 67 68 69 69 77 80 80 78 76 76 72 71 70 73 71 78 80 ; data=rev(data); /* original data in reverse order */ t=seqa(1,1,rows(data)); library pgraph; graphset; _pltype=6; _plegctl=1; _plegstr="actual\000Henderson 7"; title("Henderson 7"); xy(t,data~henderson7(data)); proc henderson7(x); local w,t,k,i,m,w1,w2,w3; /* Symmetric part in the middle */ w={0.412,0.294,0.059,-0.059}; t=rows(x); k=rows(w)-1; w=rev(w[2:k+1])|w; m=zeros(rows(x),cols(x)); i=k+1; do while i<=t-k; m[i,.]=w'x[i-k:i+k,.]; i=i+1; endo; /* Asymmetric part at end points */ w1={-0.034,0.116,0.383,0.535}; w2={-0.054,0.061,0.294,0.41,0.289}; w3={-0.053,0.058,0.287,0.399,0.275,0.034}; m[1,.]=rev(w1)'x[1:k+1,.]; m[t,.]=w1'x[t-k:t,.]; m[2,.]=rev(w2)'x[1:k+2,.]; m[t-1,.]=w2'x[t-k-1:t,.]; m[3,.]=rev(w3)'x[1:k+3,.]; m[t-2,.]=w3'x[t-k-2:t,.]; retp(m); endp;