Quarterly benchmarked Unit Labour Cost indicators – By economic activity - ULC_QUA

Data - OECD


Last observation: Q3 2011 (N = 387) · 2010 (N = 1652)

First observation: 1947 (N = 4) · Q1 1947 (N = 4)

Last data update: 02 août 2026, 09:17

Last compile: 04 sept. 2026, 03:12

Structure

Nobs - Javascript

Code
ULC_QUA |>
  left_join(ULC_QUA_var$SUBJECT |>
              setNames(c("SUBJECT", "Subject")), by = "SUBJECT") |>
  left_join(ULC_QUA_var$SECTOR |>
              setNames(c("SECTOR", "Sector")), by = "SECTOR") |>
  group_by(SUBJECT, Subject, SECTOR, Sector, MEASURE, FREQUENCY) |>
  summarise(Nobs = n()) |>
  arrange(-Nobs) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

Labour Income Share (Real ULC) (Total Economy)

Germany

Code
ULC_QUA |>
  filter(MEASURE == "IXOBTE",
         SUBJECT == "ULQBBU99",
         LOCATION == "DEU") |>
  left_join(ULC_QUA_var$SECTOR, by = c("SECTOR" = "id")) |>
  rename(SECTOR_desc = label) |>
  year_to_date() |>
  arrange(SECTOR_desc) |>
  ggplot() + 
  geom_line(aes(x = date, y = obsValue, color = SECTOR_desc, linetype = SECTOR_desc)) +
  scale_color_manual(values = viridis(9)[1:8]) +
  theme_minimal() +
  scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.8, 0.3),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = seq(0, 200, 10)) +
  ylab("Labour Income Share (Real ULC) (Total Economy)") + xlab("")

France

Code
ULC_QUA |>
  filter(MEASURE == "IXOBTE",
         SUBJECT == "ULQBBU99",
         LOCATION == "FRA") |>
  left_join(ULC_QUA_var$SECTOR, by = c("SECTOR" = "id")) |>
  rename(SECTOR_desc = label) |>
  year_to_date() |>
  arrange(SECTOR_desc) |>
  ggplot() + 
  geom_line(aes(x = date, y = obsValue, color = SECTOR_desc, linetype = SECTOR_desc)) +
  scale_color_manual(values = viridis(9)[1:8]) +
  theme_minimal() +
  scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.8, 0.3),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = seq(0, 200, 10)) +
  ylab("Labour Income Share (Real ULC) (Total Economy)") + xlab("")

United States

Code
ULC_QUA |>
  filter(MEASURE == "IXOBTE",
         SUBJECT == "ULQBBU99",
         LOCATION == "USA") |>
  left_join(ULC_QUA_var$SECTOR, by = c("SECTOR" = "id")) |>
  rename(SECTOR_desc = label) |>
  year_to_date() |>
  arrange(SECTOR_desc) |>
  ggplot() + 
  geom_line(aes(x = date, y = obsValue, color = SECTOR_desc, linetype = SECTOR_desc)) +
  scale_color_manual(values = viridis(9)[1:8]) +
  theme_minimal() +
  scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.7),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = seq(0, 200, 10)) +
  ylab("Labour Income Share (Real ULC) (Total Economy)") + xlab("")

Labour Income Share (Real ULC) (Total Economy)

Manufacturing

Code
ULC_QUA |>
  filter(MEASURE == "IXOBTE",
         SUBJECT == "ULQBBU99",
         SECTOR == "02",
         LOCATION %in% c("FRA", "DEU", "USA")) |>
  left_join(ULC_QUA_var$LOCATION, by = c("LOCATION" = "id")) |>
  rename(LOCATION_desc = label) |>
  year_to_date() |>
  arrange(LOCATION_desc) |>
  ggplot() + 
  geom_line(aes(x = date, y = obsValue, color = LOCATION_desc, linetype = LOCATION_desc)) +
  scale_color_manual(values = viridis(4)[1:3]) +
  theme_minimal() +
  scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.8, 0.2),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = seq(0, 200, 10)) +
  ylab("Labour Income Share (Real ULC) (Total Economy)") + xlab("")

Unit Labour Cost

2000-

Code
ULC_QUA |>
  filter(SUBJECT == "ULQBBU99",
         SECTOR == "01",
         MEASURE == "IXOB",
         LOCATION %in% c("FRA", "DEU", "ITA", "GRC", "ESP")) |>
  left_join(ULC_QUA_var$LOCATION |>
              setNames(c("LOCATION", "Location")), by = "LOCATION") |>
  year_to_date() |>
  filter(date >= as.Date("2000-01-01")) |>
  group_by(Location) |>
  mutate(obsValue = 100*obsValue / obsValue[date == as.Date("2000-01-01")]) |>
  ggplot() + theme_minimal() + ylab("Unit Labour Costs") + xlab("") +
  geom_line(aes(x = date, y = obsValue, color = Location)) +
  scale_color_manual(values = viridis(6)[1:5]) +
  theme(legend.position = c(0.15, 0.8),
        legend.title = element_blank()) +
  scale_x_date(breaks = seq(1920, 2100, 1) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 200, 10))

1995-

Code
ULC_QUA |>
  filter(SUBJECT == "ULQBBU99",
         SECTOR == "01",
         MEASURE == "IXOBTE",
         FREQUENCY == "Q",
         LOCATION %in% c("FRA", "DEU", "ITA", "GRC", "ESP")) |>
  left_join(ULC_QUA_var$LOCATION |>
              setNames(c("LOCATION", "Location")), by = "LOCATION") |>
  quarter_to_date() |>
  filter(date >= as.Date("1995-01-01")) |>
  group_by(Location) |>
  mutate(obsValue = 100*obsValue / obsValue[date == as.Date("2000-01-01")]) |>
  ggplot() + theme_minimal() + ylab("Unit Labour Costs") + xlab("") +
  geom_line(aes(x = date, y = obsValue, color = Location)) +
  scale_color_manual(values = viridis(6)[1:5]) +
  theme(legend.position = c(0.15, 0.8),
        legend.title = element_blank()) +
  scale_x_date(breaks = seq(1920, 2100, 1) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 200, 10))