*! Attaullah Shah, attaullah.shah@imsciences.edu.pk
*! Version 2.0, July 29, 2020
* Version 1.0, 30September2017
cap prog drop asgen
prog asgen, sortpreserve byable(onecall)
syntax namelist =/ exp [if] [in], [Weights(varname) by(varlist) XFocal]
marksample touse
if "`_byvars'"!="" {
local by "`_byvars'"
}
if "`by'"=="" {
tempvar by
qui gen `by' = 1
}
if "`weights'" != "" {
qui bys `by' `touse': gen double `namelist' = sum((`exp') * `weights') / ///
sum(`weights' * !missing(`exp')) if `touse'
}
else {
qui bys `by' `touse': gen double `namelist' = sum(`exp') / ///
sum(!missing(`exp')) if `touse'
}
qui bys `by' `touse' : replace `namelist' = `namelist'[_N]
end
exit
/* Acknowledgements:
This program is mostly similar to _gwmean.ado program,
except that it does not use egen and hence offers some speed
efficiency by avaoiding the egen's overhead */