/* _gwtmean.ado originated 6-5-2001 David Kantor, Originally developed at Institute for Policy Studies, Johns Hopkins University This is an egen weighted mean function, based on c:\stata\ado\_\_gmean.ado Actually, it is just a very minor tweaking of _gmean. In fact this could be considered an enhancement to _gmean. Also note, that if you want to subsequently condense to byvar groups, you might as well use -collapse- instead, with a weight. This is used with egen as follows: egen newvar = wtmean(exp), by(byvar) weight(wgt_expr) This allows a weight option. egen does not allow a weight in the usual manner ([weight= wgtvar]), so we us an option. If the weight option is omitted, then the action and results are identical to egen mean (_gmean.ado). (If the weight expression is a non-zero constant, then, too, the results are identical to egen mean.) The weight macro captures the weight. If it is non-empty, then it is changed to include parentheses and the * operator. The inclusion of parentheses actually allows an expression -- not just a variable. */ * 2023jul18: updating to use -syntax-, rather than -parse- *! version 2.0.0 2023jul18 program define _gwtmean version 14.2 syntax newvarname =/exp [if] [in] [, by(varlist) weight(string)] tempvar touse if `"`weight'"' ~= "" { tempvar w capture noisily gen double `w' = `weight' if _rc { disp as err "error in weight expression" exit 198 } local wtfactor "*`w'" } quietly { gen byte `touse'=1 `if' `in' sort `touse' `by' by `touse' `by': gen `typlist' `varlist' = /* */ sum((`exp')`wtfactor')/sum((~mi(`exp'))`wtfactor') if `touse'==1 by `touse' `by': replace `varlist' = `varlist'[_N] } end