********************************************************************************
* This is a little helper script to create 8- and 5-class versions of Oesch 
* class variables, based on code by Amal Tawfik, University of Geneva
* found at http://people.unil.ch/danieloesch/scripts/
* 
*
* see 'help oesch' for more Info
*
********************************************************************************
* May 2018 - Simon Kaiser, University of Bern
********************************************************************************

program define oesch
		version 7
		syntax newvarname, oesch(varname numeric) [eight five replace]
		
		tempvar originType
		
		qui levelsof `oesch'
		if "`r(levels)'" != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16" {
			display as error "Error: The input variable is not coded correctly. Levels are not 1-16."
			exit 110
		}
		
		
		if "`eight'"=="eight" | "`five'"!="five" {
		
			capture confirm variable oesch8_`varlist'
			if !_rc & "`replace'"!="replace" {
				display as error "Error: One or multiple of the variables to be generated already exist. Specify option 'replace' to overwrite them."
				exit 110
			}
		}
		
		if "`five'"=="five"{

			capture confirm variable oesch5_`varlist'
			if !_rc & "`replace'"!="replace" {
				display as error "Error: One or multiple of the variables to be generated already exist. Specify option 'replace' to overwrite them."
				exit 110
			}
		}
				
		tempvar originVar
		qui gen `originVar' = `oesch'
		
		if "`eight'"=="eight" | "`five'"!="five"{
		
			capture confirm variable oesch8_`varlist'
			if !_rc & "`replace'"=="replace" {
				drop oesch8_`varlist'
			}
			qui recode `originVar' (1 2=1)(3 4=2)(5 6=3)(7 8=4)(9 10=5)(11 12=6)(13 14=7)(15 16=8), gen(oesch8_`varlist')
		
			display as text "Created 8-class variable:"
			ds oesch8_`varlist'
		
			label variable oesch8_`varlist' "`varlist' Oesch class position - 8 classes"
			label define oesch8_`varlist' ///
			1 "Self-employed professionals and large employers" ///
			2 "Small business owners" ///
			3 "Technical (semi-)professionals" ///
			4 "Production workers" ///
			5 "(Associate) managers" ///
			6 "Clerks" ///
			7 "Socio-cultural (semi-)professionals" ///
			8 "Service workers", replace
			label value oesch8_`varlist' oesch8_`varlist'
			tab oesch8_`varlist'
			
		}
		
		if "`five'"=="five"{

			capture confirm variable oesch5_`varlist'
			if !_rc & "`replace'"=="replace" {
				drop oesch5_`varlist'
			}
			qui recode `originVar' (1 2 5 9 13=1)(6 10 14=2)(3 4=3)(7 11 15=4)(8 12 16=5), gen(oesch5_`varlist')
			
			display as text "Created 5-class variable:"
			ds oesch5_`varlist'
			
			label variable oesch5_`varlist' "`varlist' Oesch class position - 5 classes"
			label define  oesch5_`varlist' ///
			1 "Higher-grade service class" ///
			2 "Lower-grade service class" ///
			3 "Small business owners" ///
			4 "Skilled workers" ///
			5 "Unskilled workers", replace
			label value oesch5_`varlist' oesch5_`varlist'
			tab oesch5_`varlist'
			
		}
		
end