*! Nick Winter 1.0.2 10 Oct 2002 program define _gnoccur version 7 gettoken type 0 : 0 gettoken g 0 : 0 gettoken eqs 0 : 0 syntax varname(string) [if] [in] , String(string) local size = length(`"`string'"') tempvar new pos count qui { gen str1 `new' = "" replace `new' = `varlist' gen int `count' = 0 gen int `pos' = index(`new',`"`string'"') capture assert `pos' == 0 `if' `in' while _rc { replace `count' = `count' + (`pos' != 0) replace `new' = substr(`new',`pos'+`size',.) replace `pos' = index(`new',`"`string'"') capture assert `pos' == 0 `if' `in' } * ignore user-specified type; a byte will often be enough gen int `g' = `count' `if' `in' compress `g' } end /* There is a trade-off on `if' `in': 0. We only to generate `if' `in' 1. We don't want to loop if there is nothing left to count 2. We suspect that `if' can slow things down */