Level of GDP per capita and productivity - PDB_LV

Data - OECD

Last observation: 2024 (N = 711)

First observation: 1960 (N = 35)

Last data update: 25 mai 2026, 00:00

Last compile: 02 sept. 2026, 23:40

Structure

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

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) |>
  add_flag_color("Location") |>
  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) |>
  add_flag_color("Location") |>
  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) |>
  add_flag_color("Location") |>
  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) |>
  add_flag_color("Location") |>
  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) |>
  add_flag_color("Location") |>
  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")]) |>
  add_flag_color("Location") |>
  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) |>
  add_flag_color("Location") |>
  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) |>
  add_flag_color("Location") |>
  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")]) |>
  add_flag_color("Location") |>
  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))