*gsum [collapse syntax] , by(catvar) g_options program define gsum *! v 1.2 gmh oct 20 2002 preserve gettoken collap after : 0 , parse(",") * parse after if index(`"`after'"',"by")==0 { di in red "-by- is required" exit (198) } gettoken blah after : after , parse(",") *local after =substr(`"`after'"',2,.) gettoken bycmd gopts : after assert index(`"`bycmd'"',"by")>0 tokenize `"`bycmd'"' , p("()") local byvar "`3'" qui collapse `collap', `bycmd' qui gen ZZZZZZ=. move `byvar' ZZZZZZ capture drop ZZZZZZ gr _all , `gopts' restore end