program def choplist, rclass *! NJC 1.4.0 13 December 2000 * NJC 1.3.0 29 June 2000 * NJC 1.2.0 7 June 2000 * NJC 1.1.0 22 Dec 1999 * NJC 1.0.0 20 Dec 1999 after discussion with Kit Baum version 6.0 gettoken list 0 : 0, parse(",") if "`list'" == "" | "`list'" == "," { di in r "nothing in list" exit 198 } syntax , [ Pos(str) Value(str asis) Length(str) Char(int 0) /* */ Noisily Global(str) ] if "`global'" != "" { tokenize `global' args global1 global2 global3 if "`global3'" != "" { di in r "global( ) must contain at most 2 names" exit 198 } if (length("`global1'") > 8) | (length("`global2'") > 8) { di in r "global name must be <=8 characters" exit 198 } } local nopts = /* */ ("`pos'" != "") + (`"`value'"' != "") + /* */ ("`length'" != "") + (`char' != 0) if `nopts' != 1 { di in r "must specify pos( ), value( ), length( ) or char( )" exit 198 } * as string <= contains quote local asstr = index(`"`value'"', `"""') tokenize `list' local n : word count `list' if "`length'" != "" | `char' != 0 { local i = 1 while `i' <= `n' { local len = length("``i''") if `len' > 80 { di in r "cannot handle word length > 80" exit 498 } local i = `i' + 1 } } local i = 1 if "`pos'" != "" { local negsign = index("`pos'", "-") if `negsign' { local pos1 = substr("`pos'",1,`negsign' - 1) local pos2 = substr("`pos'",`negsign', .) local pos2 = `n' + 1 + `pos2' local pos "`pos1'`pos2'" capture confirm integer number `pos' if _rc == 0 { local pos ">= `pos'" } } else { capture confirm integer number `pos' if _rc == 0 { local pos "<= `pos'" } } while `i' <= `n' { if `i' `pos' { local list1 "`list1' ``i''" } else local list2 "`list2' ``i''" local i = `i' + 1 } } else if "`value'" != "" { capture confirm number `value' if _rc == 0 { local value "<= `value'" } if `asstr' { while `i' <= `n' { if "``i''" `value' { local list1 `"`list1' ``i''"' } else local list2 `"`list2' ``i''"' local i = `i' + 1 } } else { while `i' <= `n' { if ``i'' `value' { local list1 "`list1' ``i''" } else local list2 "`list2' ``i''" local i = `i' + 1 } } } else if "`length'" != "" { capture confirm number `length' if _rc == 0 { local length "<= `length'" } while `i' <= `n' { if length("``i''") `length' { local list1 "`list1' ``i''" } else local list2 "`list2' ``i''" local i = `i' + 1 } } else { if `char' >= 0 { while `i' <= `n' { local one = substr("``i''",1,`char') local two = substr("``i''",`char'+1,.) local list1 "`list1' `one'" local list2 "`list2' `two'" local i = `i' + 1 } } else if `char' < 0 { while `i' <= `n' { local one = substr("``i''",`char',.) local ltwo = length("``i''") + `char' local two = substr("``i''",1,`ltwo') local list1 "`list1' `one'" local list2 "`list2' `two'" local i = `i' + 1 } } } if "`noisily'" != "" { di in g "list 1: " in y `"`list1'"' di in g "list 2: " in y `"`list2'"' } if "`global1'" != "" { global `global1' `"`list1'"' } if "`global2'" != "" { global `global2' `"`list2'"' } return local list1 `"`list1'"' return local list2 `"`list2'"' end