/* Note: The data file produced will be at the individual level and cover all ages, irrespective of the variables requested. In this current version of the tool, it is not possible to select variables by wave - though you may edit the code below to do so. */ /**************************************************************************************** * Sample Code for your request: af6b0adb42e5462a83c8b77daec64a53 * *****************************************************************************************/ clear all set more off // Replace "where" with the filepath of the working folder (where any temporary files created by this programme will be stored) eg: c:\ukhls\temp cd "where" // Replace "where" with the folderpath where the data has been downloaded and unzipped eg: c:\ukhls_data\UKDA-6614-stata\stata\stata13_se\ukhls global ukhls "where\UKDA-6614-stata\stata\stata13_se\ukhls" // Replace "where" with the filepath of the folder where you want to store the final dataset produced by this programme. eg: c:\ukhls\results global outputpath "where" // The file produced by this programme will be named as below. If you want to change the name do it here. local outputfilename "UKHLS_long_hij" // By default the data will be extracted from the waves whose letter prefixes are written below, and merged. If you want to a different selection of waves, make the change here local allWaves = "h i j" // These variables from the indall files will be included. These include some key variables as determined by us PLUS any variables requested by you. local indallvars "age_dv country ethn_dv gor_dv hhsize hidp mastat_dv nchild_dv pidp pno psnen01_lw psnen01_xw psnen91_lw psnen91_xw psnen99_lw psnen99_xw psnenub_lw psnenub_xw psnenui_lw psnenui_xw psnenus_lw psnenus_xw psu racel_dv sex_dv strata urban_dv" // These variables from the indresp files will be included. These include some key variables as determined by us PLUS any variables requested by you. local indvars "age_dv benbase4 country ethn_dv gor_dv hhsize hhtype_dv hidp ind5mus_lw ind5mus_xw indbd91_lw indbdub_lw indin01_lw indin01_xw indin91_lw indin91_xw indin99_lw indin99_xw indinub_lw indinub_xw indinui_lw indinui_xw indinus_lw indinus_xw indns91_lw indnsub_lw indpxub_lw indpxub_xw indpxui_lw indpxui_xw indpxus_lw indpxus_xw indscub_lw indscub_xw indscui_lw indscui_xw indscus_lw indscus_xw jbstat mastat_dv nchild_dv pidp pno psu racel_dv scghq1_dv sex_dv strata tenure_dv ukborn urban_dv" // These variables from the child files will be included. These include some key variables as determined by us PLUS any variables requested by you. local chvars "age_dv chddvub_lw chddvub_xw chddvui_lw chddvui_xw country gor_dv hhsize hidp pidp pno psnen01_lw psnen91_lw psnenub_lw psnenub_xw psnenui_lw psnenui_xw psnenus_lw psnenus_xw psu sex_dv strata urban_dv" // These variables from the hhresp files will be included. These include some key variables as determined by us PLUS any variables requested by you. local hhvars "country fihhmnnet1_dv gor_dv hhden01_xw hhden91_xw hhden99_xw hhdenub_xw hhdenui_xw hhdenus_xw hhsize hhtype_dv hidp ieqmoecd_dv nkids_dv psu strata tenure_dv urban_dv" // These variables from the youth files will be included. These include some key variables as determined by us PLUS any variables requested by you. local youthvars "age_dv country ethn_dv gor_dv hidp pidp pno psu racel_dv sex_dv strata urban_dv ythscub_xw ythscui_xw ythscus_xw" ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Anything below this line should not be changed! Any changes to the selection of variables and waves, and location of folders, should be made above. // ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // this program returns all variable names with the wave prefix program define getVars, rclass version 14.0 if ("`1'" != "") { local wavemyvars = " `1'" local wavemyvars = subinstr("`wavemyvars'"," "," `2'_",.) local wavemyvars = substr("`wavemyvars'",2,.) } else local wavemyvars = "" return local fixedVars "`wavemyvars'" end // this program to returns which variables exist in this wave program define getExistingVars, rclass version 14.0 local all = "" foreach var in `1' { capture confirm variable `var' if !_rc { local all = "`all' `var'" } } return local existingVars "`all'" end //loop through each wave foreach wave in `allWaves' { // find the wave number local waveno=strpos("abcdefghijklmnopqrstuvwxyz","`wave'") // find the wave household vars getVars "`hhvars'" `wave' local wavehhvars = "`r(fixedVars)'" // find the wave individual vars getVars "`indvars'" `wave' local waveindvars = "`r(fixedVars)'" // find the wave all individual vars getVars "`indallvars'" `wave' local waveindallvars = "`r(fixedVars)'" // find the wave child vars getVars "`chvars'" `wave' local wavechvars = "`r(fixedVars)'" // find the wave youth vars getVars "`youthvars'" `wave' local waveyouthvars = "`r(fixedVars)'" // open the the household level file with the required variables use "$ukhls/`wave'_hhresp", clear getExistingVars "`wave'_hidp `wavehhvars'" keep `r(existingVars)' // if only household variables are required, skip this part and return all households if ("`indvars'" != "" || "`chvars'" != "" || "`youthvars'" != "") { // if any individual variable is required, first merge INDALL keeping the pipd (and possibly some default variables?), so that other files can merge on it. merge 1:m `wave'_hidp using "$ukhls/`wave'_indall" drop _merge // drop loose households with no individuals drop if (pidp == .) // keep only variables that were requested and exist in this wave getExistingVars "pidp `wave'_hidp `wavehhvars' `waveindallvars'" keep `r(existingVars)' // add any requested individual variables if ("`indvars'" != "") { merge 1:1 pidp using "$ukhls/`wave'_indresp" drop _merge // keep only variables that were requested and exist in this wave getExistingVars "pidp `wave'_hidp `wavehhvars' `waveindvars' `waveyouthvars' `wavechvars' `waveindallvars'" keep `r(existingVars)' } // add any requested youth variables if ("`waveyouthvars'" != "") { merge 1:1 pidp using "$ukhls/`wave'_youth" drop _merge // keep only variables that were requested and exist in this wave getExistingVars "pidp `wave'_hidp `wavehhvars' `waveindvars' `waveyouthvars' `wavechvars' `waveindallvars'" keep `r(existingVars)' } // add any requested child variables if ("`wavechvars'" != "") { merge 1:1 pidp using "$ukhls/`wave'_child" drop _merge // keep only variables that were requested and exist in this wave getExistingVars "pidp `wave'_hidp `wavehhvars' `waveindvars' `waveyouthvars' `wavechvars' `waveindallvars'" keep `r(existingVars)' } } // create a wave variable gen wavename=`waveno' // drop the wave prefix from all variables rename `wave'_* * // save the file that was created save temp_`wave', replace } // open the file for the first wave (wave a_) local firstWave = substr("`allWaves'", 1, 1) use temp_`firstWave', clear // loop through the remaining waves appending them in the long format local remainingWaves = substr("`allWaves'", 3, .) foreach w in `remainingWaves' { // append the files for the second wave onwards append using temp_`w' } // check how many observations are available from each wave tab wavename // move pidp to the beginning of the file order pidp, first // save the long file save "$outputpath/`outputfilename'", replace // erase temporary files foreach w in `allWaves' { erase temp_`w'.dta } $syntax;