Employees by educational attainment level, sex, age and occupation (%) - edat_lfs_9905

Data - Eurostat

Info

Last observation: Annual: 2025 (N = 118,068)

First observation: Annual: 2004 (N = 71,696)

Last data update: 23 jul 2026, 23:04. Last compile: 24 jul 2026, 01:18

Structure

isced11

Code
load_data("eurostat/isced11_fr.RData")
edat_lfs_9905 %>%
  
  group_by(isced11, Isced11) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  print_table_conditional()
isced11 Isced11 Nobs
ED0-2 Less than primary, primary and lower secondary education (levels 0-2) 431040
ED3-8 Upper secondary, post-secondary non-tertiary and tertiary education (levels 3-8) 431040
ED3_4 Upper secondary and post-secondary non-tertiary education (levels 3 and 4) 431040
ED5-8 Tertiary education (levels 5-8) 431040
ED34_44 Upper secondary and post-secondary non-tertiary education - general (levels 34 and 44) 132830
ED35_45 Upper secondary and post-secondary non-tertiary education - vocational (levels 35 and 45) 132830

France, EU, Italy, Germany, Spain, Netherlands

15-74, peu d’éducation

Code
edat_lfs_9905 %>%
  filter(isced11 == "ED0-2",
         age == "Y15-74",
         geo %in% c("EA19", "DE", "ES", "FR", "IT"),
         isco08 == "TOTAL",
         sex == "T") %>%
  select_if(~ n_distinct(.) > 1) %>%
  year_to_date() %>%
  filter(date >= as.Date("1995-01-01")) %>%
  
  mutate(Geo = ifelse(geo == "DE", "Germany", Geo)) %>%
  mutate(Geo = ifelse(geo == "EA19", "Europe", Geo)) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(color = ifelse(geo == "EA19", color2, color)) %>%
  mutate(color = ifelse(geo == "ES", color2, color)) %>%
  mutate(values = values / 100) %>%
  ggplot(.) + geom_line(aes(x = date, y = values, color = color)) + 
  theme_minimal() + xlab("") + ylab("% Employés du 1er cycle de l'enseignement secondaire") +
  scale_color_identity() + add_5flags +
  scale_x_date(breaks = seq(1960, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-500, 200, 2),
                     labels = percent_format(accuracy = 1))

Education moyenne

Code
edat_lfs_9905 %>%
  filter(isced11 == "ED3_4",
         age == "Y15-74",
         isco08 == "TOTAL",
         geo %in% c("EA19", "DE", "ES", "FR", "IT"),
         sex == "T") %>%
  year_to_date() %>%
  filter(date >= as.Date("1995-01-01")) %>%
  
  mutate(Geo = ifelse(geo == "DE", "Germany", Geo)) %>%
  mutate(Geo = ifelse(geo == "EA19", "Europe", Geo)) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(color = ifelse(geo == "EA19", color2, color)) %>%
  mutate(color = ifelse(geo == "ES", color2, color)) %>%
  mutate(values = values / 100) %>%
  ggplot(.) + geom_line(aes(x = date, y = values, color = color)) + 
  theme_minimal() + xlab("") + ylab("% Employés des niveaux 3 et 4") +
  scale_color_identity() + add_5flags +
  scale_x_date(breaks = seq(1960, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-500, 200, 2),
                     labels = percent_format(accuracy = 1))

Enseignement supérieur

Code
edat_lfs_9905 %>%
  filter(isced11 == "ED5-8",
         age == "Y15-74",
         geo %in% c("EA19", "DE", "ES", "FR", "IT"),
         isco08 == "TOTAL",
         sex == "T") %>%
  year_to_date() %>%
  filter(date >= as.Date("1995-01-01")) %>%
  
  mutate(Geo = ifelse(geo == "DE", "Germany", Geo)) %>%
  mutate(Geo = ifelse(geo == "EA19", "Europe", Geo)) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(color = ifelse(geo == "EA19", color2, color)) %>%
  mutate(color = ifelse(geo == "ES", color2, color)) %>%
  mutate(values = values / 100) %>%
  ggplot(.) + geom_line(aes(x = date, y = values, color = color)) + 
  theme_minimal() + xlab("") + ylab("% Employés des niveaux 5 à 8") +
  scale_color_identity() + add_5flags +
  scale_x_date(breaks = seq(1960, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-500, 200, 2),
                     labels = percent_format(accuracy = 1))