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"
Comment