*! version 3.0.0 end-point rule utility program define nlsm_epu /* s[n-2] s[n-1] s[n] or s[3] s[2] s[1] */ /* s2 s1 s0 s2 s1 s0 */ local s2 = `1' local s1 = `2' /* lazy */ local s0 = `3' /* actual */ local p = `s1'+2*(`s1'-`s2') #delimit ; mac def S_1=cond( `p'<=max(`s1',`s0') & `p'>=min(`s1',`s0'),`p', cond( `s1'<=max(`p',`s0') & `s1'>=min(`p',`s0'),`s1', `s0')) ; #delimit cr end exit Equivalency of formulas. End-point adjustment E is (Velleman 3.4) z_1 = med{ 3*z_2 - 2*z_3, y_1, z_2} Equivalent to call: nlsm_epu z_3 z_2 y_1 Because: p = z_2+ 2*(z_2 - z_3) = 3*z_2 - 2*z_3