*! version 1.0.0 18Aug2000 by Duolao Wang (STB-58: sg154) program define koopman, rclass version 6 syntax varlist(min=2 max=2) [if] [in] [fw] [,Level(real 95)] tokenize `varlist' local event `1' local group `2' marksample touse markout `touse' `by' tempvar WGT quietly { if "`weight'"!="" { gen double `WGT' `exp' if `touse' local w "[fweight=`WGT']" } } quietly { qui tabu `group' if `touse' if r(N) == 0 { noisily error 2000 } if r(r) == 1 { di in red `"1 group found, only 2 groups required"' exit 499 } else if r(r)>=3 { di in red `"More than 2 groups found, only 2 groups required"' exit 499 } } qui tabu `group' `event' `w' if `touse',matcell(mcell) local options x(int 1) y(int 1) m(int 1) n(int 1) local x=round((mcell[1,2]),1) local m=round(mcell[1,1]+mcell[1,2],1) local y=round(mcell[2,2],1) local n=round(mcell[2,1]+mcell[2,2],1) koopmani `x' `m' `y' `n',level(`level') *save results return scalar x = r(x) return scalar y = r(y) return scalar m = r(m) return scalar n = r(n) return scalar theta = r(theta) return scalar theta_l = r(theta_l) return scalar theta_u = r(theta_u) return scalar level = r(level) end