Total and active population by sex, age, employment status, residence one year prior to the census and NUTS 3 regions - cens_01ramigr

Data - Eurostat

Info

Last observation: Annual: 2001 (N = 1,485,361)

First observation: Annual: 2001 (N = 1,485,361)

Last data update: 23 jul 2026, 22:29. Last compile: 24 jul 2026, 00:58

Structure

Migration in the Year Before the Census

This dataset is a single cross-section (census reference year), so the charts below compare countries and age groups rather than tracking a time series.

By Country

Code
latest_t <- cens_01ramigr %>%
  filter(!is.na(values)) %>%
  summarise(m = max(time)) %>%
  pull(m)

cens_01ramigr %>%
  filter(time == latest_t,
         nchar(geo) == 2,
         sex == "T",
         age == "TOTAL",
         wstatus == "POP",
         resid %in% c("CHG_OUT", "TOTAL")) %>%
  select(geo, Geo, resid, values) %>%
  spread(resid, values) %>%
  filter(!is.na(CHG_OUT), !is.na(TOTAL)) %>%
  mutate(rate = CHG_OUT / TOTAL) %>%
  arrange(rate) %>%
  mutate(Geo = factor(Geo, levels = Geo)) %>%
  ggplot + geom_col(aes(x = Geo, y = rate), fill = "steelblue") +
  coord_flip() +
  theme_minimal() +
  xlab("") + ylab("Share of population resident outside the country one year earlier") +
  scale_y_continuous(labels = scales::percent_format(accuracy = 0.1))

Age Profile: Poland

Code
age_bands <- c("Y5-9", "Y10-14", "Y15-19", "Y20-24", "Y25-29", "Y30-34", "Y35-39",
               "Y40-44", "Y45-49", "Y50-54", "Y55-59", "Y60-64", "Y65-69", "Y70-74",
               "Y75-79", "Y80-84", "Y85-89", "Y90-94", "Y95-99")

cens_01ramigr %>%
  filter(time == latest_t,
         geo == "PL",
         sex == "T",
         wstatus == "POP",
         age %in% age_bands,
         resid %in% c("CHG_OUT", "TOTAL")) %>%
  select(age, resid, values) %>%
  spread(resid, values) %>%
  mutate(rate = CHG_OUT / TOTAL,
         age = factor(age, levels = age_bands)) %>%
  ggplot + geom_col(aes(x = age, y = rate), fill = "darkred") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  xlab("") + ylab("Share who changed residence from outside Poland (past year)") +
  scale_y_continuous(labels = scales::percent_format(accuracy = 0.1))

Snapshot by Country

Code
cens_01ramigr %>%
  filter(time == latest_t,
         nchar(geo) == 2,
         sex == "T",
         age == "TOTAL",
         wstatus == "POP",
         resid %in% c("CHG_OUT", "CHG_OUT3", "TOTAL")) %>%
  select(Geo, resid, values) %>%
  spread(resid, values) %>%
  mutate(`Rate (CHG_OUT/TOTAL)` = scales::percent(CHG_OUT / TOTAL, accuracy = 0.1)) %>%
  arrange(desc(CHG_OUT)) %>%
  print_table_conditional()
Geo CHG_OUT CHG_OUT3 TOTAL Rate (CHG_OUT/TOTAL)
France 1187182 8896369 58513700 2.0%
Poland 633595 748104 37878418 1.7%
United Kingdom 406706 2036178 57733848 0.7%
Switzerland 288003 388604 7288010 4.0%
Spain 265692 209100 40847371 0.7%
Italy 223634 706717 56995744 0.4%
Netherlands 137013 313555 15985538 0.9%
Portugal 105705 120195 10356117 1.0%
Greece 67251 218721 10934097 0.6%
Ireland 64605 52316 3106824 2.1%
Sweden 55961 167088 8882792 0.6%
Denmark 43663 148201 5349212 0.8%
Norway 30380 100412 4520947 0.7%
Czechia 22805 56483 10230060 0.2%
Cyprus 16471 NA 689565 2.4%
Finland 15283 103800 5181115 0.3%
Hungary 14388 103668 10198315 0.1%
Lithuania 1661 0 3483972 0.0%
Latvia 1275 7639 2377383 0.1%
Estonia 0 0 1370052 0.0%
Austria NA NA 8032926 NA
Germany NA NA 82259540 NA
LU Luxembourg NA NA 439539 NA
Slovakia NA NA 5379455 NA
Slovenia NA 7192 1964036 NA