*! version 1.0.0 1/20/93 STB-12: gr12 program define _ggroup version 3.0 local type "`1'" mac shift local g "`1'" mac shift mac shift /* discard = sign */ local varlist "req ex" local in "opt" local if "opt" local options "Missing" parse "`*'" tempvar touse quietly { gen byte `touse'=1 `if' `in' if "`missing'"=="" { parse "`varlist'", parse(" ") while "`1'"!="" { local t : type `1' if substr("`t'",1,3)=="str" { replace `touse'=. if `1'=="" } else replace `touse'=. if `1'==. mac shift } } sort `touse' `varlist' quietly by `touse' `varlist': /* */ gen `type' `g'=1 if _n==1 & `touse'==1 replace `g'=sum(`g') replace `g'=. if `touse'!=1 sort `g' } label var `g' "group(`varlist')" end