* version 1.2 Nov2022 Matteo Pinna, matteo.pinna@gess.ethz.ch * version 1.1: adds warning for the overwriting of the dummy variable * version 1.2: adds sample conditions (if,in); defines the inlist dummy as a byte and sets it equal to zero when conditions are not satisfied; sets to quietly the replace commands (unless verbose option is on); optimises the dummy creation and sets a default var label. The author would like to thank Mead Over for proposing these additions to the command. cap program drop inlist2 program define inlist2 version 12.1 syntax varlist (min=1 max=1) [if] [in], VALues(string) [ /// /* optional */ name(string) Verbose /// ] marksample touse, strok if "`verbose'"=="" local silently quietly if ("`name'"=="") local name "inlist2" capture confirm variable `name' if (!_rc==1) di as error "Warning: inlist2 is replacing a preexisting variable with the same name. See option name(string)" cap drop `name' tokenize "`values'", parse(",") local num_values=((length("`values'") - length(subinstr("`values'",",","", .)))*2)+1 cap gen byte `name'=. capture confirm string variable `varlist' if !_rc { forvalues iteration=1(2)`num_values' { `silently' replace `name'= (`varlist'=="``iteration''") if `touse' & `name'!=1 } } else { forvalues iteration=1(2)`num_values'{ `silently' replace `name'= (`varlist'==``iteration'') if `touse' & `name'!=1 } } lab var `name' "=1 if -`varlist'- equals the specified value(s); 0 otherwise" note `name' : Specified values: `values' end