/* Henderson's 17-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 17"; title("Henderson 17"); xy(t,data~henderson17(data)); proc henderson17(x); local w,t,k,i,m,w1,w2,w3,w4,w5,w6,w7,w8; /* Symmetric part in the middle */ w={0.190,0.176,0.141,0.092,0.042,0.002,-0.019,-0.02,-0.009}; 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.081,-0.062,-0.032,0.018,0.087,0.166,0.244,0.309,0.351}; w2={-0.042,-0.04,-0.026,0.007,0.059,0.121,0.182,0.23,0.255,0.254}; w3={-0.017,-0.025,-0.02,0.004,0.047,0.101,0.152,0.191,0.206,0.197,0.164}; w4={-0.005,-0.016,-0.015,0.005,0.043,0.092,0.14,0.174,0.186,0.172,0.136,0.086}; w5={-0.001,-0.013,-0.014,0.005,0.043,0.091,0.138,0.171,0.181,0.167,0.129,0.078,0.026}; w6={-0.003,-0.015,-0.015,0.005,0.043,0.091,0.138,0.172,0.183,0.169,0.132,0.081,0.029,-0.012}; w7={-0.006,-0.017,-0.016,0.004,0.043,0.092,0.14,0.174,0.186,0.173,0.137,0.087,0.036,-0.005,-0.027}; w8={-0.009,-0.019,-0.018,0.003,0.042,0.092,0.141,0.176,0.188,0.175,0.14,0.091,0.04,0.001,-0.021,-0.023}; 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,.]; m[4,.]=rev(w4)'x[1:k+4,.]; m[t-3,.]=w4'x[t-k-3:t,.]; m[5,.]=rev(w5)'x[1:k+5,.]; m[t-4,.]=w5'x[t-k-4:t,.]; m[6,.]=rev(w6)'x[1:k+6,.]; m[t-5,.]=w6'x[t-k-5:t,.]; m[7,.]=rev(w7)'x[1:k+7,.]; m[t-6,.]=w7'x[t-k-6:t,.]; m[8,.]=rev(w8)'x[1:k+8,.]; m[t-7,.]=w8'x[t-k-7:t,.]; retp(m); endp;