Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • no variables defined r(111); Error Troubleshooting Request

    I am having trouble with this code, when ever I try to run it, Stata returns error message "no variable defined":

    Code:
    * === [1] Define input and output directories ===
    local input_dir "/Users/muhammadkhan/Downloads/HIES_2022_Data"
    local output_dir "/Users/muhammadkhan/Downloads/HIES_2022_Data"
    
    cd "`input_dir'"
    
    * === [2] Specify target files to process ===
    local files "HH_SEC_1A1.dta HH_SEC_1A2.dta HH_SEC_1B.dta HH_SEC_1C.dta HH_SEC_2A.dta HH_SEC_3A.dta HH_SEC_4A.dta HH_SEC_05.dta HH_SEC_6B.dta HH_SEC_7A.dta"
    
    * === [3] Variables to keep from each file ===
    local keep_HH_SEC_1A1     "PSU HHID S1AQ01 S1AQ02 S1AQ03 S1AQ12 S1AQ13"
    local keep_HH_SEC_1A2      "PSU HHID S1AQ16 S1AQ17 S1AQ18 S1AQ19 S1AQ20 S1AQ21"
    local keep_HH_SEC_1B      "PSU HHID S1BQ05 S1BQ06"
    local keep_HH_SEC_1C      "PSU HHID S1CQ01 S1CQ05A S1CQ05B S1CQ05C S1CQ06 S1CQ07E S1CQ07F S1CQ072D"
    local keep_HH_SEC_2A      "PSU HHID S2AQ03 S2AQ04"
    local keep_HH_SEC_3A      "PSU HHID S3AQ01 S3AQ20A S3AQ14A"
    local keep_HH_SEC_4A      "PSU HHID s4aq01a s4aq05a s4bq16 s4bq17"
    local keep_HH_SEC_05      "PSU HHID s5q01b s5q07 s5q20 s5q21 s5q22 s5q23"
    local keep_HH_SEC_6B      "PSU HHID S6BQ02 S6BQ04"
    local keep_HH_SEC_7A      "PSU HHID S7AQ01 S7AQ02 S7AQ06"
    
    * === [4] Variables to keep from each file ===
    local rename_HH_SEC_1A1     "S1AQ01 sex S1AQ02 HH_relate S1AQ03 age S1AQ12 fin_acc S1AQ13 mfs_acc"
    local rename_HH_SEC_1A2      "S1AQ16 visual_impaired S1AQ17 hearing_impaired S1AQ18 physical_impaired S1AQ19 memory_impaired S1AQ20 self_care_impaired S1AQ21 comm_impaired"
    local rename_HH_SEC_1B      "S1BQ05 wage_work S1BQ06 self_work"
    local rename_HH_SEC_1C      "S1CQ01 soc_sec_enrolled S1CQ05A cash_value S1CQ05B cash_tenor S1CQ05C cash_time_unit S1CQ06 in_kind_payment S1CQ07E ink_total_value S1CQ07F ink_tenor  S1CQ072D ink_unit"
    local rename_HH_SEC_2A      "S2AQ03 educ_enrolled S2AQ04 highest_class"
    local rename_HH_SEC_3A      "S3AQ01 chronic_illness S3AQ20A total_inpatient_cost S3AQ14A total_outpatient_cost"
    local rename_HH_SEC_4A      "s4aq01a employment_industry s4aq05a urb_rural  s4bq16 net_wage_inc s4bq17 total_perk_value"
    local rename_HH_SEC_05      "s5q01b enterprise_industry s5q07 profit_share s5q20 net_revenue s5q21 capex s5q22 divestment s5q23 bus_value"
    local rename_HH_SEC_6B      "S6BQ02 major_shock S6BQ04 shock_length"
    local rename_HH_SEC_7A      "S7AQ01 cultivable_size S7AQ02 dwelling_size S7AQ06 operating_land"
    
    
    * === [5] Process and collapse each file ===
    local i = 1
    
    foreach file of local files {
        di as text "Processing: `file'"
    
        * Get base name without .dta
        local fbase = subinstr("`file'", ".dta", "", .)
        local keepvars = "`keep_`fbase''"
        local renames = "`rename_`fbase''"
        tokenize `renames'
        while "`1'" != "" {
                           rename `1' `2'
                           macro shift 2
        }
    
        * Load only relevant variables
        use `keepvars' using "`file'", clear
    
        * Confirm PSU and HHID exist
        capture confirm variable PSU
        if _rc {
            di as error "PSU missing in `file'"
            continue
        }
    
        capture confirm variable HHID
        if _rc {
            di as error "HHID missing in `file'"
            continue
        }
    
        * Identify non-ID variables to transform or collapse
        ds PSU HHID, not
        local vars `r(varlist)'
    
        * Convert string or labeled vars to dummies
        foreach v of local vars {
            quietly describe `v'
            local type : type `v'
    
            * String vars → dummies
            if substr("`type'", 1, 3) == "str" {
                quietly levelsof `v', local(levels) clean
                foreach val of local levels {
                    gen byte `v'_`=strtoname("`val'")' = (`v' == "`val'")
                }
                drop `v'
            }
    
            * Labeled numeric vars → dummies
            else if "`: value label `v''" != "" {
                quietly levelsof `v', local(levels)
                foreach val of local levels {
                    gen byte `v'_`val' = (`v' == `val')
                }
                drop `v'
            }
    
            * Numeric vars (float/int/etc.) → keep
            else if inlist("`type'", "float", "double", "int", "byte", "long") {
                continue
            }
    
            * Unknown → drop
            else {
                di as text "Dropping unrecognized variable: `v'"
                drop `v'
            }
        }
    
        * Collapse to household level using PSU+HHID
        ds PSU HHID, not
        local collvars `r(varlist)'
        collapse (sum) `collvars', by(PSU HHID)
    
        * Save collapsed file
        tempfile collapsed_`fbase'
        save `collapsed_`fbase'', replace
        di as result "Saved collapsed_`fbase'.dta"
    
        * Merge into master dataset
        if `i' == 1 {
            use `collapsed_`fbase'', clear
            tempfile base
            save `base'
        }
        else {
            use `base', clear
            merge 1:1 PSU HHID using `collapsed_`fbase'', nogenerate
            save `base', replace
        }
    
        local ++i
    }
    
    * === [6] Save final merged dataset ===
    use `base', clear
    save "`output_dir'/merged_HH_level.dta", replace
    di as result "Merged dataset saved to merged_HH_level.dta"

  • #2
    Well, at the time you try to execute
    Code:
    while "`1'" != "" {
       rename `1' `2'
       macro shift 2
    }
    you have not yet -use-d any data set, so there are no variables defined and you can't -rename- non-existent variables.

    You need to move that code (along with the -tokenize `renames'- command that immediately precedes it) to follow -use `keepvars' using "`file'", clear-. I think that will solve your problem.

    Comment


    • #3
      thanks, it worked!!!

      Comment

      Working...
      X