*! 1.0.0 NJC 8 Feb 2000 program define _gilast version 6.0 gettoken type 0 : 0 gettoken g 0 : 0 gettoken eqs 0 : 0 syntax varname(numeric) [if] [in], Value(int) /* */ [ BY(varlist) BEfore After ] if ("`before'" != "") & ("`after'" != "") { di in r "must choose between -before- and -after-" exit 198 } tempvar touse order neqval mark `touse' `if' `in' gen long `order' = _n sort `touse' `by' `order' quietly { by `touse' `by' : gen `neqval' = /* */ sum(`varlist' == `value') if `touse' /* ignore user-supplied `type' */ if "`before'`after'" == "" { by `touse' `by': gen byte `g' = /* */ `neqval' == `neqval'[_N] & `neqval' != `neqval'[_n-1] if `touse' by `touse' `by': replace `g' = 0 /* */ if `neqval'[_N] == 0 } else if "`before'" != "" { by `touse' `by': gen byte `g' = /* */ `neqval' < `neqval'[_N] | `neqval'[_N] == 0 } else if "`after'" != "" { by `touse' `by': gen byte `g' = /* */ `neqval' == `neqval'[_N] & `neqval' == `neqval'[_n-1] if `touse' by `touse' `by': replace `g' = 0 /* */ if `neqval'[_N] == 0 } } end