*! Command line version of effmenu1 *! Michael Hills 1/5//2002 *! version 3.0.0 program define effmenu2 version 7.0 syntax [varlist] [if] [in] , Res(string) Typ(string) Exp(string) /* */ [FUP(string) Mod(string) EFFects(string) PERY(integer 1000) /* */ PERU(integer 1) PERC(integer 100) MCC MVAR(string) BASE(integer 1) EXM /* */ MOM SHOWAT(numlist) CON(string) MET(string) /* */ VERbose LEVel(integer $S_level)] macro drop EF_* macro drop ef_* global ef_res `res' global ef_typ `typ' global ef_fup `fup' global ef_exp `exp' global ef_mod `mod' if "`typ'"=="metric" { if "`effects'"=="md" {global ef_sca 1} if "`effects'"=="mr" {global ef_sca 2} } if "`typ'"=="binary" { if "`effects'"=="pd" {global ef_sca 1} if "`effects'"=="pr" {global ef_sca 2} if "`effects'"=="or" {global ef_sca 3} } if "`typ'"=="failure" | "`type'"=="count" { if "`effects'"=="rd" {global ef_sca 1} if "`effects'"=="rr" {global ef_sca 2} } global ef_peru `peru' global ef_pery `pery' global ef_perc `perc' global ef_bas `base' global ef_sho `showat' global ef_mvar `mvar' global ef_con `con' global ef_met `met' global ef_ver `verbose' global ef_lev `level' global ef_bas `base' global ef_exm 0 if "`exm'" == "exm" { global ef_exm 1 } global ef_mom 0 if "`mom'" == "mom" { global ef_mom 1 } global ef_mcc 0 if "`mcc'" == "mcc" { global ef_mcc 1 } global ef_ver 0 if "`verbose'" == "verbose" { global ef_ver 1 } global ef_opt /* Sets all variables to categorical as default */ tokenize "`varlist'" while "`1'" != "" { char `1'[type] "categorical" mac shift } /* sets type for categorical variables */ if $ef_exm==1 { char $ef_exp[type] "metric" } if $ef_mom==1 { if "$ef_mod" == "" { di as error "Metric modifier specified, but no modifier given" exit } else { char $ef_mod[type] "metric" } } /* basic error checking */ global ef_exp = ltrim("$ef_exp") global ef_mod = ltrim("$ef_mod") global ef_res = ltrim("$ef_res") if "$ef_res"=="" { di as error "No response variable has been specified!" exit } else { cap confirm numeric variable $ef_res if _rc==7 { di as error "Response variable must be numeric" exit } } if "$ef_typ" == "" { di as error "Type of response variable must be selected" exit } if "$ef_exp"=="" { di as error "Explanatory variable must be specified" exit } else { cap confirm numeric variable $ef_exp if _rc==7 { di as error "Exposure variable must be numeric" exit } } if "$ef_res"=="$ef_exp" { di as error "Variable occurs as both response and main explanatory" exit } if "$ef_res"=="$ef_mod" { di as error "Variable occurs as both response and modifier" exit } if "$ef_mod"=="$ef_exp" { di as error "Variable occurs as both main explanatory and modifier" exit } if "$ef_mod" != "" { cap confirm numeric variable $ef_mod if _rc==7 { di as error "Modifier variable must be numeric" exit } } if "$ef_typ"=="binary" { cap assert $ef_res ==0 | $ef_res ==1 | $ef_res==. if _rc==9 { di in red "Binary response must be coded 0/1" exit } } if "$ef_typ"=="binary" { cap assert "$ef_fup"=="" if _rc==9 { di in red "Cannot have follow-up time with binary repsonse" exit } } if "$ef_typ"=="failure" { cap assert $ef_res ==0 | $ef_res ==1 | $ef_res==. if _rc==9 { di in red "Failure response must be coded 0/1" exit } } if "$ef_typ"=="failure" | "$ef_typ"=="count" { cap assert "$ef_fup" != "" if _rc==9 { di in red "Failure and count responses must have follow-up time" exit } } qui inspect $ef_exp if r(N_unique)>15 & "`$ef_exp[type]'"!="metric" { display as error" More than 15 values for exposure ($ef_exp)" display as text "Should it be declared as metric?" exit } if "$ef_mod" != "" { qui inspect $ef_mod if r(N_unique)>15 & "`$ef_mod[type]'"!="metric" { display as error " More than 15 values for modifier ($ef_mod)" di as text "Should it be declared as metric?" exit } } qui inspect $ef_exp if $ef_bas == 0 | $ef_bas > r(N_unique) { di as error "Baseline out of range" exit } if "$ef_con"!="" { tokenize "$ef_con" while "`1'" != "" { if "`1'" == "$ef_mod" { di as error "Cannot include variable as both modifier and control" exit } mac shift } } /* displays exposure and modifier type */ if "$ef_exp" != "" { if "`$ef_exp[type]'" == "categorical" { global EF_exptype "is categorical" } if "`$ef_exp[type]'" == "metric" { global EF_exptype " is metric" } } if "$ef_mod" != "" { if "`$ef_mod[type]'" == "categorical" { global EF_modtype "is categorical" global ef_sho } if "`$ef_mod[type]'" == "metric" { global EF_modtype "is metric" } } tokenize "$ef_met" while "`1'" != "" { char `1'[type] "metric" mac shift } dis "" effects1 `if' `in' , level($ef_lev) end