Level of GDP per capita and productivity - PDB_LV

Data - OECD

Info

source dataset Title .html .rData
oecd PDB_LV Level of GDP per capita and productivity - PDB_LV 2026-08-11 2026-05-24

Data on productivity

source dataset Title .html .rData
oecd PDBI_I4 Productivity by industry (ISIC Rev.4) - PDBI_I4 2026-08-11 2026-08-02
oecd ULC_EEQ Unit labour costs and labour productivity (employment based), Total economy 2026-08-12 2026-08-02

LAST_COMPILE

LAST_COMPILE
2026-08-13

Last

obsTime Nobs
2024 711
2023 849
2022 863

Nobs

Code
PDB_LV |>
  group_by(MEASURE, Measure, UNIT_MEASURE, `Unit of measure`) |>
  summarise(Nobs = n()) |>
  arrange(-Nobs) |>
  print_table_conditional()
MEASURE Measure UNIT_MEASURE Unit of measure Nobs
GDP Gross domestic product USD_PPP US dollars, PPP converted 4766
GDPPOP GDP per capita XDC_PS National currency per person 4036
GDPEMP GDP per person employed USD_PPP_PS US dollars per person, PPP converted 3744
GDPEMP GDP per person employed XDC_PS National currency per person 3462
GDPHRS GDP per hour worked USD_PPP_H US dollars per hour, PPP converted 2599
GDPHRS GDP per hour worked XDC_H National currency per hour 2540
GDP Gross domestic product XDC National currency 2343
POP Population PS Persons 2139
GDPPOP GDP per capita USD_PPP_PS US dollars per person, PPP converted 2071
EMP Employment PS Persons 1964
HRSTO Hours worked for total employment H Hours 1304
HRSPOP Labour utilisation (hours worked per head of population) H_PS Hours per person 1290
HRSAV Average hours worked per person employed H_PS Hours per person 1226

MEASURE

Code
PDB_LV |>
  group_by(MEASURE, Measure) |>
  summarise(Nobs = n()) |>
  arrange(-Nobs) |>
  print_table_conditional()
MEASURE Measure Nobs
GDPEMP GDP per person employed 7206
GDP Gross domestic product 7109
GDPPOP GDP per capita 6107
GDPHRS GDP per hour worked 5139
POP Population 2139
EMP Employment 1964
HRSTO Hours worked for total employment 1304
HRSPOP Labour utilisation (hours worked per head of population) 1290
HRSAV Average hours worked per person employed 1226

T_HRSPOP - Labour utilisation (hours worked per head of population)

PCTUS - As % of the USA (USA=100)

Code
PDB_LV |>
  filter(MEASURE == "HRSPOP",
         UNIT_MEASURE == "H_PS",
         LOCATION %in% c("ITA", "DEU", "GRC", "ESP", "PRT", "FRA", "USA")) |>
  year_to_date() |>
  filter(date >= as.Date("2000-01-01")) |>
  group_by(date) %>%
  filter(any(LOCATION == "USA")) |>
  mutate(obsValue = obsValue / obsValue[LOCATION == "USA"]) |>
  filter(LOCATION != "USA") |>
  group_by(LOCATION) |>
  arrange(date) |>
  left_join(colors, by = c("Location" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) + 
  theme_minimal() + xlab("") + ylab("") + scale_color_identity() + add_6flags +
  scale_x_date(breaks = seq(1960, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.9),
        legend.title = element_blank(),
        legend.direction = "horizontal") +
  scale_y_continuous(breaks = 0.01*seq(0, 200, 5),
                labels = percent_format(acc = 1))

PEHRS - Persons/Hours

Code
PDB_LV |>
  filter(MEASURE == "HRSPOP",
         UNIT_MEASURE == "H_PS",
         LOCATION %in% c("ITA", "DEU", "GRC", "ESP", "PRT", "FRA")) |>
  year_to_date() |>
  #filter(date >= as.Date("2000-01-01")) %>%
  group_by(LOCATION) |>
  arrange(date) |>
  left_join(colors, by = c("Location" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) + 
  theme_minimal() + xlab("") + ylab("") + scale_color_identity() + add_6flags +
  scale_x_date(breaks = seq(1960, 2100, 5) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.9),
        legend.title = element_blank(),
        legend.direction = "horizontal") +
  scale_y_continuous(breaks =seq(0, 20000, 25),
                     labels = dollar_format(acc = 1, p = "", su = "h"))

T_HRSAV - Average hours worked per person employed

PEHRS - Persons/Hours

Code
PDB_LV |>
  filter(MEASURE == "HRSAV",
         UNIT_MEASURE == "H_PS",
         LOCATION %in% c("ITA", "DEU", "GRC", "ESP", "PRT", "FRA")) |>
  year_to_date() |>
  #filter(date >= as.Date("2000-01-01")) %>%
  group_by(LOCATION) |>
  arrange(date) |>
  left_join(colors, by = c("Location" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) + 
  theme_minimal() + xlab("") + ylab("") + scale_color_identity() +add_6flags +
  scale_x_date(breaks = seq(1960, 2100, 5) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.9),
        legend.title = element_blank(),
        legend.direction = "horizontal") +
  scale_y_continuous(breaks =seq(0, 20000, 25),
                     labels = dollar_format(acc = 1, p = "", su = "h"))

GDP per person employed - T_GDPEMP

VPVOB = USD, constant prices, 2015 PPPs

Code
PDB_LV |>
  filter(MEASURE == "GDPEMP",
         UNIT_MEASURE == "USD_PPP_PS", PRICE_BASE == "Q",
         LOCATION %in% c("ITA", "DEU", "GRC", "ESP", "PRT", "FRA")) |>
  year_to_date() |>
  filter(date >= as.Date("2000-01-01")) |>
  group_by(LOCATION) |>
  arrange(date) |>
  left_join(colors, by = c("Location" = "country")) |>
  mutate(obsValue = obsValue / 1000) |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) + 
  theme_minimal() + xlab("") + ylab("GDP Per Person Employed") + scale_color_identity() + add_6flags +
  scale_x_date(breaks = seq(1960, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.9),
        legend.title = element_blank(),
        legend.direction = "horizontal") +
  scale_y_log10(breaks = seq(0, 200, 5),
                labels = dollar_format(su = "k", acc = 1))

GDP Per head, Heterogeneity in EU

VPVOB = USD, constant prices, 2015 PPPs

Code
PDB_LV |>
  filter(MEASURE == "GDPPOP",
         UNIT_MEASURE == "USD_PPP_PS", PRICE_BASE == "V",
         LOCATION %in% c("ITA", "DEU", "GRC", "ESP", "PRT", "FRA")) |>
  year_to_date() |>
  filter(date >= as.Date("2000-01-01")) |>
  group_by(LOCATION) |>
  arrange(date) |>
  left_join(colors, by = c("Location" = "country")) |>
  mutate(obsValue = obsValue/1000) |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) + 
  theme_minimal() + xlab("") + ylab("") + scale_color_identity() +add_6flags +
  scale_x_date(breaks = seq(1960, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.9),
        legend.title = element_blank(),
        legend.direction = "horizontal") +
  scale_y_log10(breaks = seq(0, 200, 5),
                labels = dollar_format(su = "k", acc = 1))

100

Code
PDB_LV |>
  filter(MEASURE == "GDPPOP",
         UNIT_MEASURE == "USD_PPP_PS", PRICE_BASE == "V",
         LOCATION %in% c("ITA", "DEU", "GRC", "ESP", "PRT", "FRA")) |>
  year_to_date() |>
  filter(date >= as.Date("2000-01-01")) |>
  group_by(LOCATION) |>
  arrange(date) |>
  mutate(obsValue = 100 * obsValue / obsValue[date == as.Date("2007-01-01")]) |>
  left_join(colors, by = c("Location" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) + 
  theme_minimal() + xlab("") + ylab("") + scale_color_identity() +add_6flags +
  scale_x_date(breaks = seq(1960, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.9),
        legend.title = element_blank(),
        legend.direction = "horizontal") +
  scale_y_log10(breaks = seq(70, 200, 5))

GDP per hour worked, Heterogeneity in EU

Norway, Germany, Greece, United States, United Kingdom, France

in $

Code
PDB_LV |>
  filter(MEASURE == "GDPHRS",
         UNIT_MEASURE == "USD_PPP_H", PRICE_BASE == "Q",
         LOCATION %in% c("NOR", "DEU", "GRC", "USA", "GBR", "FRA")) |>
  year_to_date() |>
  group_by(LOCATION) |>
  arrange(date) |>
  left_join(colors, by = c("Location" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) + 
  theme_minimal() + xlab("") + ylab("USD, constant prices, 2015 PPPs") + scale_color_identity() + add_6flags +
  scale_x_date(breaks = seq(1960, 2100, 5) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.9),
        legend.title = element_blank(),
        legend.direction = "horizontal") +
  scale_y_continuous(breaks = seq(0, 200, 5),
                labels = dollar_format(p = "$", su = "/h"))

Set Countries

in $

Code
PDB_LV |>
  filter(MEASURE == "GDPHRS",
         UNIT_MEASURE == "USD_PPP_H", PRICE_BASE == "Q",
         LOCATION %in% c("ITA", "DEU", "GRC", "ESP", "PRT", "FRA")) |>
  year_to_date() |>
  group_by(LOCATION) |>
  arrange(date) |>
  left_join(colors, by = c("Location" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) + 
  theme_minimal() + xlab("") + ylab("USD, constant prices, 2015 PPPs") + scale_color_identity() +add_6flags +
  scale_x_date(breaks = seq(1960, 2100, 5) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.9),
        legend.title = element_blank(),
        legend.direction = "horizontal") +
  scale_y_continuous(breaks = seq(0, 200, 5),
                labels = dollar_format(p = "$", su = "/h"))

Base 100 = 2007

Code
PDB_LV |>
  filter(MEASURE == "GDPHRS",
         UNIT_MEASURE == "USD_PPP_H", PRICE_BASE == "Q",
         LOCATION %in% c("ITA", "DEU", "GRC", "ESP", "PRT", "FRA")) |>
  year_to_date() |>
  filter(date >= as.Date("2000-01-01")) |>
  group_by(LOCATION) |>
  arrange(date) |>
  mutate(obsValue = 100 * obsValue / obsValue[date == as.Date("2007-01-01")]) |>
  left_join(colors, by = c("Location" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) + 
  theme_minimal() + xlab("") + ylab("") + scale_color_identity() +add_6flags +
  scale_x_date(breaks = seq(1960, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.25, 0.9),
        legend.title = element_blank(),
        legend.direction = "horizontal") +
  scale_y_log10(breaks = seq(70, 200, 5))