Deaths by week, sex and NUTS 3 region - demo_r_pjanaggr3

Data - Eurostat

Info

Last observation: Annual: 2025 (N = 26,760)

First observation: Annual: 1990 (N = 4,485)

Last data update: 23 jul 2026, 22:08. Last compile: 24 jul 2026, 01:12

Structure

Population Aging

Share of Population Aged 65+

Code
demo_r_pjanaggr3 %>%
  filter(geo %in% c("FR", "DE", "IT", "ES", "PT"),
         sex == "T",
         age %in% c("TOTAL", "Y_GE65")) %>%
  year_to_date %>%
  select(geo, Geo, date, age, values) %>%
  spread(age, values) %>%
  mutate(values = Y_GE65 / TOTAL) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  theme_minimal() + scale_color_identity() + add_5flags +
  scale_x_date(breaks = as.Date(paste0(seq(1990, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Population aged 65 or over (% of total)") +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1))

Total Population, Indexed (1990 = 100)

Code
demo_r_pjanaggr3 %>%
  filter(geo %in% c("FR", "DE", "IT", "ES", "PT"),
         sex == "T",
         age == "TOTAL") %>%
  year_to_date %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  group_by(geo) %>%
  arrange(date) %>%
  mutate(values = 100 * values / first(values)) %>%
  ungroup() %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  theme_minimal() + scale_color_identity() + add_5flags +
  scale_x_date(breaks = as.Date(paste0(seq(1990, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Total population (1990 = 100)")

Age Structure, Latest Year

Code
latest_yr <- demo_r_pjanaggr3 %>%
  filter(geo %in% c("FR", "DE", "IT", "ES", "PT"),
         sex == "T",
         age == "TOTAL",
         !is.na(values)) %>%
  summarise(m = max(time)) %>%
  pull(m)

demo_r_pjanaggr3 %>%
  filter(geo %in% c("FR", "DE", "IT", "ES", "PT"),
         sex == "T",
         age %in% c("Y_LT15", "Y15-64", "Y_GE65"),
         time == latest_yr) %>%
  group_by(geo) %>%
  mutate(share = round(100 * values / sum(values), 1)) %>%
  ungroup() %>%
  select(Age, Geo, share) %>%
  spread(Geo, share) %>%
  print_table_conditional()
Age France Germany Italy Portugal Spain
65 years or over 21.9 22.7 24.7 24.3 20.7
From 15 to 64 years 61.5 63.4 63.4 63.0 66.4
Less than 15 years 16.6 13.9 11.9 12.6 12.9