// This function is very slow. Only use it when the size of the data is not big // ============================================================================ program varconvert, rclass // ------------------------------------------------------------------------- // Check the variable type // ========================================================================= capture confirm variable `0' if _rc != 0 { display as err "variable `0' was not found" error 198 } capture confirm numeric variable `0' if _rc == 0 { local type numeric } else { local type string } local data local N = _N // Converting numeric variable // ------------------------------------------------------------------------- if "`type'" == "numeric" { forval i = 1/`N' { //avoid the first comma if !missing("`data'") local data "`data'," //turn missing to NA if !missing(`0'[`i']) { local data : display "`data'" `0'[`i'] } else { local data : display "`data'" "NA" } } } // Converting string variable // ------------------------------------------------------------------------- else { forval i = 1/`N' { //avoid the first comma if !missing(`"`macval(data)'"') local data "`data'," //turn missing to NA if !missing(`0'[`i']) { local data : display `"`macval(data)'"' `"""' `0'[`i'] `"""' } else { local data : display `"`macval(data)'"' "NA" } } } // Return R code to reconstruct the variable // ------------------------------------------------------------------------- local code "c(`data')" display as txt `"{p}`code'"' if "`type'" == "numeric" { return local `0' "`code'" return local type "numeric" } else { return local `0' `"`macval(code)'"' return local type "string" } end