*! version 1.0.1 Fri Apr 8 10:46:03 CDT 1994 (STB20: sg25) program define xi version 3.1 parse "`*'", parse(" ,:()") if "`1'"==":" { mac shift local i 2 local xeq "yes" } else local i 1 capture drop I* /* (crude but necessary) */ global X__in global X__out global X__cont while "``i''"!="" { if upper(substr("``i''",1,2))=="I." { if index("``i''","*") { xi_eii ``i'' "*" } else if index("``i''","|") { xi_eii ``i'' "|" } else xi_ei ``i'' local `i' "$S_1" if "``i''"=="." { local `i' " " } } local i=`i'+1 } global X__in global X__out global X__cont if "`xeq'"=="yes" { `*' } end exit I.myvar means dummies for myvar, drop the most frequent I.myvar*this means continuous interaction (still drop most frequent) I.myvar*I.that means dummy interaction. I.myvar[what] means dummies for myvar, drop dummy for myvar==what I.myvar*thatvar means interaction of myvar and thatvar I.myvar[val]*thatvar[val] means drop corresponding. 12345678 I123_#x# I12##x## For I.name*I.name We try: 12345 IrXr_ e.g., IrXr_#_# for two 1-digit numbers Irr_ e.g., Irr_#_## or Irr_##_# for 1 and 2 digit numbers Irr e.g., Irr##_## for two 2-digit numbers For I.name*name Irr_# I.abc*I.def IrXr_ we try, then shorten to Irr_ I12345_# I1234_## I1234###