*************************************************************** *************************************************************** *** Titel des Projekts: Estimating the causal effect of collective bargaining on the wage distribution *** Datengrundlage: Verdienststrukturerhebung (VSE) 2006 *** *** Dateiname des Programmcodes: 00a_Datenaufbereitung2006.do *** Diese Version: 3.12.2014 *** von: Katrin Sommerfeld *** E-Mail: Katrin.sommerfeld@zew.de *** Tel: 0621-1235 216 *** *** Dateiname des Log-Files: 00a_Datenaufbereitung2006.log *** *** Grundriss des Programms: *** *** *************************************************************** *** 01 DATENAUFBEREITUNG *************************************************************** * * ** A) Arbeitnehmer-Datensatz ** * 1. Generiere Stunden --> Lohn und andere Variablen * a) Arbeitsstunden im Monat Oktober * b) Stundenlohn * 2. Generate and recode more variables * 3. Vorbereitung der Beschränkung des Sample * * ** B) Betriebs-Datensatz ** * 1. Datenaufbereitung Betriebsdatensatz * 2. Merge mit Arbeitnehmer-Datensatz * 3. Generiere neue Variablen im gemeinsamen Datensatz * a) Wirtschaftszweige + Korrektur * b) Tarifbindung individuell angepasst an Firmenniveau * 4. Beschränkung des Sample * * ** C) Describe ** * * *************************************************************** * Bildschirmausgabe steuern: clear set more off set mem 1g ***************************************************************** *** A) Nur Arbeitnehmer-Datensatz 2006 *** use "arbeitnehmer2006_rel_v2.dta", clear describe *********************************************** *** 1. Define variables correctly *** *********************************************** gen use=1 label define use 1 "to be used" label values use use *********************************************** *** a) HOURS = Working hours per MONTH *** *********************************************** * inklusive Mehrarbeit capture gen hours=. label var hours "DN: Working hours per MONTH" * für Stundenlöhner: replace hours=ef19+ef20 * für Nicht-Stundenlöhner, also hauptsächlich Angestellte: replace hours=(ef18*4.345)+ef20 if (ef19==0|ef18==ef19|hours==.) sum hours, det * Teilzeit-Dummy: Welches Maß ist zuverlässiger? tab ef16u1, m gen teilzeit=0 replace teilzeit=1 if ef16u1==8|hours<(18*4.345) replace teilzeit=2 if ef16u1==9|(hours>=18*4.345&hours<30*4.345) replace teilzeit=0 if hours>=30*4.345 *********************************************** *** b) Stundenlohn *** *********************************************** gen wage = ef21/hours if hours>0 *sum wage, det replace use=10 if hours<5 // 2200 replace use=11 if hours>304 // entspricht 70 bezahlten Stunden pro Woche // 500 replace use=12 if ef21==0 // 0 *replace wage=. if ef21 < (50/0.93012) // 0.12 % *replace wage=. if ef21 > (12000/0.93012) // 0.11 % *replace wage=. if wage<4 // mach das erst am Ende! replace use=13 if wage > (70/0.93012) // label var wage "DN: Hourly wage with overtime pay" // enthält Verdienst aus Mehrarbeit(szeit) *sum wage, det replace wage = wage*0.93012 //Auf Niveau von 2001 deflationieren gen lnwage=log(wage) label var wage "DN: Log hourly wage with overtime pay" // enthält Verdienst aus Mehrarbeit(szeit) *********************************************** *** 2. Generate and recode more variables *** *********************************************** *** Tarifart *** tab ef8 capture rename ef8 tarifart label var tarifart "Tarifvertrag individuell von ef8" * fasse Firmentarifvertrag und Betriebsvereinbarung zusammen recode tarifart(3=2) recode tarifart(.=0) label define tarif 0"Individuell" 1"Flächentarifvertrag" 2"FirmenTV + Betriebsvereinbarung" label values tarifart tarif gen no = (tarifart==0) gen general = (tarifart==1) gen firm = (tarifart==2) *** Beruf *** rename ef15 beruf *** Sex *** tab ef10 recode ef10 (1=0) (2=1), gen(sex) label define sex 1"female" 0"male" label values sex sex *** Age *** rename ef41 age label var age "Age" gen age2 = age^2 *** Unternehmenszugehörigkeit *** rename ef40 tenure gen tenure2=tenure*tenure *** Region *** capture destring region, replace tab region, m gen east = (region>=8 & region<.) gen west = (region<8) label var east "Ost mit Berlin" label var west "West ohne Berlin" tab region, gen(region) *** Education *** tab ef16u2, m gen educ_low = (ef16u2==1|ef16u2==3) //Keine Berufsausbilidung, auch ABi ohne Ausbildung gen educ_med = (ef16u2==2|ef16u2==4) //Mit BErufsaubildung gen educ_high = (ef16u2==5|ef16u2==6) //Uni oder FH gen educ_na = (ef16u2==0|ef16u2==7) //NA label var educ_low "DN from ef16u2: educ low" label var educ_med "DN from ef16u2: educ med" label var educ_high "DN from ef16u2: educ high" label var educ_na "DN from ef16u2: educ n/a" gen educ=0 replace educ=1 if educ_low==1 replace educ=2 if educ_med==1 replace educ=3 if educ_high==1 replace educ=4 if educ_na==1 * Interaktionen * gen age_low = age*educ_low gen age_med = age*educ_med gen age_high= age*educ_high gen age_na = age*educ_na *** Hochrechnungsfaktor = Gewicht *** rename ef38 weight sum weight, det rename ef26 sozvsarbtag gen extra = (ef23>0 & ef23<.) label var extra "Dummy für Nacht-/ Schicht-/ Sonntagsarbeit" gen year=2006 *********************************************** * 3. Beschränkung des Sample vorbereiten *********************************************** count * Lösche Personen in Ausbildung und Praktikanten tab ef17, m tab ef17, m nol replace use=2 if ef16u1==0 | ef17==4 * Lösche Personen in Altersteilzeit replace use=3 if ef17==3 // 0 * Lösche Personen über 55 bzw. unter 25 replace use=4 if age>55 & age<. & use!=3 replace use=5 if age<25 *replace use=6 if east==1 replace use=7 if hours==0 & use==1 replace use=8 if wage==. & use==1 replace use=9 if teilzeit!=0 * Hier erst Niedriglohn raus! * Achtung: hier wurden die Löhne schon deflationiert, deshalb keine weitere Anpassung! disp "Hier Beschränkung auf >= 4 Euro pro Stunde:" replace use=14 if wage< 4 & use==1 // Nur noch ??? !! label define use 2 "Ausbildung/ Praktikum", add label define use 3 "Altersteilzeit", add label define use 4 ">55 Jahre" 5"<25 Jahre", add label define use 6 "East", add label define use 7 "hours=0", add label define use 8 "wage=.", add label define use 9 "Teilzeit", add label define use 10"hours<5" 11"hours>304" 12"Monatslohn=0" 13"wage>70", add label define use 14 "wage<4", add tab use compress sort betr_id fallnr describe save "arbeitnehmer2006_rel_v2_bearb.dta", replace *** Ende Teil A): Nur Arbeitnehmer 2006 *********************************************** ************************************************************************************* *** B) Betriebe 2006 use "Betriebe2006_roh3.dta", clear describe ********************************************************************** * 1. Datenaufbereitung Betriebsdatensatz ********************************************************************** gen male=ef11/ef26 if ef26<=1000 replace male=ef11 if ef26>1000 replace male=male/100 if male>1 label var male "Anteil Männer an Beschäftigten des Betriebes" gen male2=ef11/(ef11+ef12) gen female=ef12/ef26 if ef26<=1000 replace female=ef12 if ef26>1000 replace female=female/100 if female>1 label var female "Anteil Frauen an Beschäftigten des Betriebes" tab ef9, m rename ef9 public recode public (1=0) (2=1) rename ef10 size recode size (1/99=1) (100/199=2) (200/999=3) (1000/1999=4) (2000/9999=5), gen(sizeclass) tab sizeclass, gen(size) drop ef8 ef16* ef17* ef18* ef19* ef20* sort betr_id compress save "betriebe2006_rel_v2_bearb.dta", replace ********************************************************************** *** 2. merge zusammen *** ********************************************************************** merge betr_id using "arbeitnehmer2006_rel_v2_bearb.dta" tab _merge keep if _merge==3 drop _merge compress ********************************************************************** *** 3. Variablen generieren im gemeinsamen Datensatz *** ********************************************************************** gen help=teilzeit recode help (2=1) bysort betr_id: egen shareTZ=mean(help) drop help label var shareTZ "Anteil TZ-AN im Betrieb" bysort betr_id: egen meanwage = mean(wage) gen diff = meanwage-wage label var diff "Difference between mean betriebs wage and individual wage" ************************* *** Wirtschaftszweige *** ************************* tab ef6, m tab ef6, m nol gen wz = ef6 lookfor wz tab wz capture destring wz, replace lookfor wz cap tab wz capture label var wz "Nicht-korrigierter Wirtschaftszweig" * Beschäftigte in neu aufgenommen WZ werden aus dem sample rausgenommen: drop if wz==80 drop if wz==85 drop if wz==90 drop if wz==70 tab wz, gen(wz) m lookfor wz forvalues t=1/24{ gen w`t' = (wz`t'==1) } * Zwischen Wirtschaftsklassifikation 1993 und 2003 hat sich hieran nichts geändert * Deshalb analog zur Aufbereitung 2001: gen w25 = (wz25==1|wz26==1) gen w26 = (wz27==1|wz28==1) gen w27 = (wz29==1) gen w28 = (wz30==1|wz31==1|wz32==1) gen wzgruppe=0 label var wzgruppe "Korrigierte Wirtschaftszweige" forvalues w=1/28 { cap replace wzgruppe=`w' if w`w'==1 } cap drop wz1-wz32 tab wzgruppe, m ******************************************************************* *** 3.b Tarifvertrag - angepasst für Rate of coverage on firm level *** ******************************************************************* bysort betr_id: egen share_ind = mean(no) bysort betr_id: egen share_col = mean(general) bysort betr_id: egen share_firm = mean(firm) gen indcontract=1 replace indcontract=0 if (share_col>0.01|share_firm>0.01) gen colcontract=0 replace colcontract=1 if (share_col>0.01) replace colcontract=0 if (share_col0.01) replace firmcontract=0 if (share_firm