Hourly Earnings - HOU_EAR

Data - OECD

Info

Last observation: Q: 2026-Q2 (N = 5) · M: 2026-06 (N = 5) · A: 2025 (N = 83)

First observation: A: 1955 (N = 13) · M: 1955-01 (N = 8) · Q: 1955-Q1 (N = 13)

Last data update: 17 aoû 2026, 00:36. Last compile: 18 aoû 2026, 00:18

Structure

Detail

The Hourly Earnings dataset contains predominantly monthly statistics, and associated statistical methodological information, for the OECD member countries and for selected non-member economies.

The Hourly Earnings dataset provides monthly and quarterly data on employees’ earnings series. It includes earnings series in manufacturing and for the private economic sector. Mostly the sources of the data are business surveys covering different economic sectors, but in some cases administrative data are also used.

The target series for hourly earnings correspond to seasonally adjusted average total earnings paid per employed person per hour, including overtime pay and regularly recurring cash supplements. Where hourly earnings series are not available, a series could refer to weekly or monthly earnings. In this case, a series for full-time or full-time equivalent employees is preferred to an all employees series.

SECTOR

Code
HOU_EAR |>
  group_by(SECTOR, `Institutional sector`) |>
  summarise(nobs = n()) |>
  arrange(-nobs) |>
  print_table_conditional()
SECTOR Institutional sector nobs
S1 Total economy 34107
S1D Private sector 7555

ADJUSTMENT

Code
HOU_EAR |>
  group_by(ADJUSTMENT, Adjustment) |>
  summarise(nobs = n()) |>
  arrange(-nobs) |>
  print_table_conditional()
ADJUSTMENT Adjustment nobs
Y Calendar and seasonally adjusted 26204
N Neither seasonally adjusted nor calendar adjusted 15458

FREQ

Code
HOU_EAR |>
  group_by(FREQ, `Frequency of observation`) |>
  summarise(nobs = n()) |>
  arrange(-nobs) |>
  print_table_conditional()
FREQ Frequency of observation nobs
M Monthly 22076
Q Quarterly 15731
A Annual 3855

obsTime

Code
HOU_EAR |>
  group_by(obsTime) |>
  summarise(Nobs = n()) |>
  arrange(desc(obsTime)) |>
  print_table_conditional()

Eurozone, United States

All

Code
HOU_EAR |>
  filter(SECTOR == "S1",
         FREQ == "Q",
         REF_AREA %in% c("USA", "EA19"),
         ADJUSTMENT == "Y") |>
  quarter_to_date() |>
  mutate(Ref_area = ifelse(REF_AREA == "EA19", "Europe", Ref_area)) |>
  left_join(colors, by = c("Ref_area" = "country")) |>
  mutate(color = ifelse(REF_AREA == "EA19", color2, color)) |>
  rename(Location = Ref_area) |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) + 
  scale_color_identity() + theme_minimal() + add_2flags +
  scale_x_date(breaks = seq(1920, 2100, 5) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(10, 500, 10),
                     labels = scales::dollar_format(accuracy = 1, suffix = "", prefix = "")) +
  ylab("") + xlab("")

1996-

Quarterly

Code
HOU_EAR |>
  filter(SECTOR == "S1",
         FREQ == "Q",
         REF_AREA %in% c("USA", "EA19"),
         ADJUSTMENT == "Y") |>
  quarter_to_date() |>
  filter(date >= as.Date("1996-01-01")) |>
  
  group_by(REF_AREA) |>
  arrange(date) |>
  mutate(obsValue = 100*obsValue/obsValue[1]) |>
  mutate(Ref_area = ifelse(REF_AREA == "EA19", "Europe", Ref_area)) |>
  left_join(colors, by = c("Ref_area" = "country")) |>
  mutate(color = ifelse(REF_AREA == "EA19", color2, color)) |>
  rename(Location = Ref_area) |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) + 
  scale_color_identity() + theme_minimal() + add_2flags +
  scale_x_date(breaks = seq(1996, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(10, 500, 10),
                     labels = scales::dollar_format(accuracy = 1, suffix = "", prefix = "")) +
  ylab("") + xlab("")

2019Q4

Quarterly

Code
HOU_EAR |>
  filter(SECTOR == "S1",
         FREQ == "Q",
         REF_AREA %in% c("USA", "EA19", "FRA", "DEU"),
         ADJUSTMENT == "Y") |>
  quarter_to_date() |>
  filter(date >= as.Date("2019-10-01")) |>
  
  group_by(REF_AREA) |>
  arrange(date) |>
  mutate(obsValue = 100*obsValue/obsValue[1]) |>
  mutate(Ref_area = ifelse(REF_AREA == "EA19", "Europe", Ref_area)) |>
  left_join(colors, by = c("Ref_area" = "country")) |>
  mutate(color = ifelse(REF_AREA == "EA19", color2, color)) |>
  rename(Location = Ref_area) |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) + 
  scale_color_identity() + theme_minimal() + add_4flags +
  scale_x_date(breaks = seq(1996, 2100, 1) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(10, 500, 2),
                     labels = scales::dollar_format(accuracy = 1, suffix = "", prefix = "")) +
  ylab("") + xlab("")

Quarterly

Code
HOU_EAR |>
  filter(SECTOR == "S1",
         FREQ == "Q",
         REF_AREA %in% c("USA", "EA19", "FRA", "EU27_2020"),
         ADJUSTMENT == "Y") |>
  quarter_to_date() |>
  filter(date >= as.Date("2019-10-01")) |>
  
  group_by(REF_AREA) |>
  arrange(date) |>
  mutate(obsValue = 100*obsValue/obsValue[1]) |>
  mutate(Ref_area = ifelse(REF_AREA == "EA19", "Europe", Ref_area)) |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = Ref_area)) + 
  theme_minimal() +
  scale_x_date(breaks = seq(1996, 2100, 1) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(10, 500, 2),
                     labels = scales::dollar_format(accuracy = 1, suffix = "", prefix = "")) +
  ylab("") + xlab("")

Monthly

Code
HOU_EAR |>
  filter(SECTOR == "S1",
         FREQ == "M",
         REF_AREA %in% c("USA", "EA19"),
         ADJUSTMENT == "Y") |>
  month_to_date() |>
  filter(date >= as.Date("1996-01-01")) |>
  
  group_by(REF_AREA) |>
  arrange(date) |>
  mutate(obsValue = 100*obsValue/obsValue[1]) |>
  mutate(Ref_area = ifelse(REF_AREA == "EA19", "Europe", Ref_area)) |>
  left_join(colors, by = c("Ref_area" = "country")) |>
  mutate(color = ifelse(REF_AREA == "EA19", color2, color)) |>
  rename(Location = Ref_area) |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) + 
  scale_color_identity() + theme_minimal() + add_2flags +
  scale_x_date(breaks = seq(1996, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(10, 500, 10),
                     labels = scales::dollar_format(accuracy = 1, suffix = "", prefix = "")) +
  ylab("") + xlab("")

Eurozone, Japan, United States, United Kingdom

All

Code
HOU_EAR |>
  filter(SECTOR == "S1",
         FREQ == "Q",
         REF_AREA %in% c("USA", "JPN", "EA19", "GBR", "HUN", "POL"),
         ADJUSTMENT == "Y") |>
  quarter_to_date() |>
  
  mutate(Ref_area = ifelse(REF_AREA == "EA19", "Europe", Ref_area)) |>
  left_join(colors, by = c("Ref_area" = "country")) |>
  mutate(color = ifelse(REF_AREA == "EA19", color2, color)) |>
  rename(Location = Ref_area) |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) + 
  scale_color_identity() + theme_minimal() + add_6flags +
  scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(10, 500, 10),
                     labels = scales::dollar_format(accuracy = 1, suffix = " k", prefix = "")) +
  ylab("") + xlab("")

2015-

Code
HOU_EAR |>
  filter(SECTOR == "S1",
         FREQ == "Q",
         REF_AREA %in% c("USA", "JPN", "EA19", "GBR", "HUN", "POL"),
         ADJUSTMENT == "Y") |>
  quarter_to_date() |>
  filter(date >= as.Date("2015-01-01")) |>
  
  mutate(Ref_area = ifelse(REF_AREA == "EA19", "Europe", Ref_area)) |>
  left_join(colors, by = c("Ref_area" = "country")) |>
  mutate(color = ifelse(REF_AREA == "EA19", color2, color)) |>
  rename(Location = Ref_area) |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) + 
  scale_color_identity() + theme_minimal() + add_6flags +
  scale_x_date(breaks = seq(1920, 2100, 1) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(10, 500, 10),
                     labels = scales::dollar_format(accuracy = 1, suffix = "", prefix = "")) +
  ylab("") + xlab("")