// parser
capture program drop mi_impute_cmd_from_parse
program mi_impute_cmd_from_parse
      version 18
      syntax anything [if]  ,  b(namelist min=1) v(namelist min=1) IModel(string)  [ * ]
	
      gettoken ivar xvars : anything
	  
	  capture confirm numeric variable `ip'
	  local eqnames: coleq `b'
	  local rownames: colfullnames `b'	  
	  global MI_IMPUTE_user_ib  `b'
	  global MI_IMPUTE_user_iV  `v'	  
	  global MI_IMPUTE_user_imodel `imodel'
	  global MI_IMPUTE_user_ipred `ip'
 
	  if "`imodel'" == "qreg" {
			    tempname sub 
				mat `sub' = $MI_IMPUTE_user_ib[1,"q50:"]
				local names: colnames `sub'
				global MI_IMPUTE_user_np : word count `names'	
				local indepv : subinstr local names "_cons" ""
				global MI_IMPUTE_user_indepv `indepv'
	  }
	   
	  if ("`imodel'" == "logit") {
				tempname sub 
				mat `sub' = $MI_IMPUTE_user_ib
				local names: colnames `sub'
				global MI_IMPUTE_user_np : word count `names'	
				local indepv : subinstr local names "_cons" ""
				global MI_IMPUTE_user_indepv `indepv'
	  }
	  
	  if ("`imodel'" == "mlogit") {

				tempname sub 
				mat `sub' = $MI_IMPUTE_user_ib
				local names: colnames `sub'
				local eqnames: coleq `sub'
				local k : colnlfs `sub'
				local k_1 = `k'-1
				local nrw: word count `names'
				local stop = 0
				local i = 1
				while `stop' != 1 {
					local pick: word `i' of `names'
					if `sub'[1, `i']==0 {
								local baseout: word `i' of `eqnames'
								local stop = 1 
					}
					local i = `i' + 1
				}
				local list_v_m ""
				forv s = 1/`nrw' {
					local pick: word `s' of `eqnames'
					if regexm("`list_v_m'", "`pick'") != 1 local list_v_m "`list_v_m' `pick'"
				}

				local no_base_list_v : subinstr local list_v_m "`baseout'" ""
				local no_base_list_v = stritrim("`no_base_list_v'")
 
				global MI_IMPUTE_mogit_lv "`list_v_m'"
				global MI_IMPUTE_mogit_lv_nb "`no_base_list_v'"
				global MI_IMPUTE_mogit_ref "`baseout'"
				global MI_IMPUTE_logit_nl = `k'

				local s = 1
				local pick: word `s' of `no_base_list_v'
				tempname pick1
				mat `pick1' = `sub'[1, "`pick':"]
				local names: colnames `pick1'
				global MI_IMPUTE_user_np : word count `names'	
				local indepv : subinstr local names "_cons" ""
				global MI_IMPUTE_user_indepv `indepv'
	  }
	 * local xvars "`indepv'"
      u_mi_impute_user_setup `if', ivars(`ivar') xvars(`xvars') `options'  title1("External imputation using `imodel'")
 end