// Program to get var characteristics
// Author Christiaan Righolt
// Version history
// 1.0	Dec 2022	Initial version

program define get_var_info, rclass
	syntax varname(fv)
	// Categorical if string OR i. OR val label
	// Else continuous

	local dot_pos = strpos("`varlist'",".")
	local base_name = substr("`varlist'",`dot_pos'+1,.)
	loca pre_dot = substr("`varlist'",1,`dot_pos'-1)

	if "`pre_dot'"=="i" {
		local is_i_dot = 1
		quietly levelsof(`base_name'), local(var_levels)
		local base_level : word 1 of `var_levels'
	}
	else if substr("`pre_dot'",1,2)=="ib" { // Stata converts bNi. into ibN.
		local is_i_dot = 1
		local base_level = substr("`pre_dot'",3,.)
	}
	else {
		local is_i_dot = 0
		local base_level = .
	}

	local var_type : type `base_name'
	local is_string = substr("`var_type'",1,3)=="str"

	local val_label : val label `base_name'
	local has_label = !missing("`val_label'")

	if `is_i_dot' | `is_string' | `has_label' return local type = "cat"
	else return local type = "cont" 

	return local is_i_dot = `is_i_dot'
	return local is_string = `is_string'
	return local base_name = "`base_name'"
	return local base_level = `base_level'
end