Skip to content

wageotc: Hourly wage (adjusted) - OTC consistent

wageotc title image

Description

wageotc is the hourly wage in dollars per hour for workers paid hourly or nonhourly, including payments for overtime, tips, and commissions. In contrast to wageotc_noadj, wageotc includes imputed values for respondents with top-coded weekly earnings or weekly hours that vary.

Availability

Sample Years
ORG 1994 - present

wage is a similar variable available back to 1973 that excludes overtime, tips, commissions for hourly workers.

Detailed comments

The analysis above uses the CPS ORG for 1979-2023 and the CPS May for 1973-1978.

Code

Variable creation
********************************************************************************
* wageotc
* NBER-style wage variable usual hourly earnings
* INcluding overtime, tips, commissions for hourly workers
* adjusted for top-coding, hours vary imputations, and trimmed of extreme values
********************************************************************************

capture confirm variable wageotc, exact
if _rc == 0 {
    drop wageotc
}
gen wageotc = .

if $monthlycps == 1 {
    if $earnerinfo == 1 {
        if tm(1994m1) <= $date {
            * for hourly workers
            replace wageotc = wageotc_noadj if paidhre == 1
            * for nonhourly
            replace wageotc = wage if paidhre == 0
        }
    }

    * trim wage values according to extreme values
    merge m:1 year using $extremewages, assert(2 3) keepusing(wage_lower wage_upper)
    keep if _merge == 3
    replace wageotc = . if wageotc < wage_lower
    replace wageotc = . if wageotc > wage_upper
    drop _merge wage_lower wage_upper
}

lab var wageotc "Hourly wage (adjusted) - OTC consistent"
notes wageotc: Dollars per hour, for hourly and nonhourly workers
notes wageotc: Includes overtime, tips, commissions for nonhourly and hourly
notes wageotc: Adjustments for top-coding, trimming of outliers
notes wageotc: Includes nonhourly workers whose usual hours vary
notes wageotc: Covers only hourly workers who report hourly rate of pay
notes wageotc: 1994-present, CPS: derived from wage, weekpay, phersul1, otcamt, otrec, peernhro
Figure creation
keep if age >= 16 & age != .
recode wage (0 = .)
recode wageotc (0 = .)

gen wgt = .
replace wgt = basicwgt if year <= 1978
replace wgt = orgwgt if year >= 1979

gcollapse (p50) wage wageotc [pw=wgt], by(year) fast
* inflation-adjust wages
preserve
sysuse cpi_annual, clear
keep year cpiurs
keep if year > = 1973
tempfile cpiurs
save `cpiurs'
restore
merge m:1 year using `cpiurs', keep(3) nogenerate
sum cpiurs if year == 2023
local basevalue = r(mean)
replace wage = wage * `basevalue' / cpiurs
replace wageotc = wageotc * `basevalue' / cpiurs

* make graph
foreach var of varlist wage* {
    sum `var' if year == 2008
    local `var'yvalue = r(mean)
    local `var'xvalue = 2008
}
local wageyvalue = `wageyvalue' - 0.8
local wageotcyvalue = `wageotcyvalue' + 1.0

local color1 228 26 28
local color2 55 126 184
local color3 77 175 74
local color4 152 78 163
local color5 255 127 0

local dollar=char(36)

line wage wageotc year, ///
legend(off) ///
xlabel(1975(5)2020) ///
ylabel(12(2)24 26 "$24", angle(0) gmin gmax) ///
xtitle("") ytitle("") ///
lcolor("`color4'" "`color2'") ///
graphregion(color(white)) plotregion(color(white)) ///
title("Median real wages (in 2023`dollar')", size(medium)) ///
text(`wageyvalue' `wagexvalue' "wage", color("`color4'") placement(c)) ///
text(`wageotcyvalue' `wageotcxvalue' "wageotc", color("`color2'") placement(c))
graph export ${variableimages}wageotc_titleimage.svg, replace

/***
The analysis above uses the CPS ORG for 1979-2023 and the CPS May for 1973-1978.
***/