Progression to secondary school (%)

Source: worldbank.org, 03.09.2025

Year: 2016

Flag Country Value Value change, % Rank
Afghanistan Afghanistan 92.3 +7.01% 82
Albania Albania 98.2 +0.106% 58
Argentina Argentina 99.9 +0.365% 10
Armenia Armenia 98.1 -0.387% 59
Austria Austria 99.8 -0.158% 15
Azerbaijan Azerbaijan 97.6 -1.86% 66
Burundi Burundi 76.3 -12.1% 106
Burkina Faso Burkina Faso 76.1 -1.92% 107
Bulgaria Bulgaria 99.3 +0.638% 35
Bahrain Bahrain 99.4 -0.637% 34
Bosnia & Herzegovina Bosnia & Herzegovina 98.6 -0.241% 51
Belarus Belarus 98 -0.0668% 61
Belize Belize 95.2 -1.61% 75
Bolivia Bolivia 96.6 -0.622% 71
Brunei Brunei 99.7 +0.355% 17
Bhutan Bhutan 99.6 +0.579% 22
Switzerland Switzerland 99.9 +0.0708% 8
Chile Chile 97.9 +0.333% 62
Côte d’Ivoire Côte d’Ivoire 91.9 -0.0362% 86
Cape Verde Cape Verde 99.4 +1.84% 31
Costa Rica Costa Rica 85.3 +0.753% 99
Cuba Cuba 98.6 -0.207% 52
Cyprus Cyprus 99.7 +1.36% 16
Czechia Czechia 99.9 -0.0102% 6
Germany Germany 99.5 -0.403% 29
Djibouti Djibouti 83.9 +10.2% 100
Denmark Denmark 99.9 -0.00658% 7
Dominican Republic Dominican Republic 92.6 +0.0625% 81
Ecuador Ecuador 99 +0.371% 44
Egypt Egypt 94.4 +0.82% 78
Spain Spain 100 +0.719% 3
Estonia Estonia 99.8 +0.0943% 12
Finland Finland 99.9 -0.0913% 9
United Kingdom United Kingdom 100 2
Georgia Georgia 99.5 -0.312% 27
Ghana Ghana 93.1 -5.2% 80
Greece Greece 98.9 +1.86% 46
Grenada Grenada 87.5 -10.2% 97
Guatemala Guatemala 89.7 +0.229% 93
Hong Kong SAR China Hong Kong SAR China 99.6 -0.0706% 24
Croatia Croatia 98.6 -0.52% 53
Hungary Hungary 99.5 -0.341% 28
Indonesia Indonesia 91.5 -0.17% 88
India India 90.3 -0.543% 91
Iran Iran 95.7 -1.32% 74
Israel Israel 99.6 -0.109% 21
Italy Italy 100 +0.0216% 5
Jamaica Jamaica 94.5 +4.25% 77
Jordan Jordan 99.3 +0.508% 36
Japan Japan 100 +0.0236% 1
Kazakhstan Kazakhstan 99.1 -0.781% 40
Kyrgyzstan Kyrgyzstan 99.4 -0.29% 33
Cambodia Cambodia 87.2 +2.58% 98
South Korea South Korea 99.6 -0.00969% 19
Kuwait Kuwait 97.1 -2.57% 67
Laos Laos 87.7 -0.767% 94
Lebanon Lebanon 97.6 +2.35% 65
Liberia Liberia 79.6 +0.311% 104
St. Lucia St. Lucia 96.8 -0.237% 69
Liechtenstein Liechtenstein 97.8 +1.09% 63
Lithuania Lithuania 99.2 -0.488% 38
Latvia Latvia 99 +0.0809% 45
Macao SAR China Macao SAR China 99.8 +0.0831% 14
Morocco Morocco 90.2 +1.7% 92
Moldova Moldova 98.4 +0.219% 56
Maldives Maldives 98.9 -0.693% 49
Mexico Mexico 96.6 +0.361% 73
Mali Mali 78.3 -0.792% 105
Malta Malta 98.9 +0.308% 48
Montenegro Montenegro 99.8 +3.32% 11
Mongolia Mongolia 99.1 -0.201% 43
Mauritania Mauritania 58.3 -1.51% 111
Mauritius Mauritius 87.5 +1.96% 95
Malaysia Malaysia 91 +4.43% 90
Norway Norway 99.7 -0.284% 18
Nepal Nepal 82.4 -5.82% 103
Oman Oman 98.3 -0.241% 57
Panama Panama 99.2 +0.425% 39
Peru Peru 93.8 -1.21% 79
Philippines Philippines 96.6 +0.00803% 72
Poland Poland 99.8 +0.246% 13
Palestinian Territories Palestinian Territories 98.8 -0.447% 50
Qatar Qatar 98.9 -0.654% 47
Romania Romania 99.5 +0.0372% 25
Rwanda Rwanda 82.4 +14.4% 102
Saudi Arabia Saudi Arabia 92.1 +5.63% 83
Sudan Sudan 92 +0.494% 85
Senegal Senegal 73 -4.62% 108
Singapore Singapore 99.1 +9.13% 41
Solomon Islands Solomon Islands 91.2 +2.43% 89
Sierra Leone Sierra Leone 87.5 -4.35% 96
El Salvador El Salvador 92.1 -0.542% 84
Serbia Serbia 99.5 -0.0317% 26
São Tomé & Príncipe São Tomé & Príncipe 97 +4.33% 68
Suriname Suriname 62.5 -8.62% 109
Slovakia Slovakia 99.1 +0.028% 42
Slovenia Slovenia 100 +0.718% 4
Sweden Sweden 99.6 -0.0669% 23
Eswatini Eswatini 98.1 -0.576% 60
Seychelles Seychelles 98.5 +1.18% 55
Togo Togo 83.2 -2.43% 101
Tajikistan Tajikistan 99.5 +0.0703% 30
Timor-Leste Timor-Leste 91.6 -2.21% 87
Tunisia Tunisia 97.7 +9.92% 64
Uganda Uganda 59 +9.42% 110
Ukraine Ukraine 99.6 +0.836% 20
United States United States 99.2 37
Uzbekistan Uzbekistan 99.4 -0.0744% 32
St. Vincent & Grenadines St. Vincent & Grenadines 94.6 -2.7% 76
Venezuela Venezuela 98.6 +0.75% 54
Samoa Samoa 96.8 -1.65% 70

The indicator 'Progression to secondary school (%)' serves as a vital measure of educational attainment, reflecting the percentage of children who successfully transition from primary to secondary education. As an essential component of a robust educational system, this indicator provides insights into how well a country or region prepares its youth for further educational opportunities, which in turn influences their prospects for personal and professional development.

Understanding the importance of this indicator cannot be overstated. A high progression rate often correlates with better educational outcomes, higher literacy rates, and improved economic prospects for individuals and societies. It signifies that a nation is investing in its future by ensuring that children continue their education past the foundational primary years. Conversely, low progression rates can signal underlying challenges in the education system, such as lack of resources, socio-economic barriers, or misalignment between educational policies and the needs of the population.

The progression to secondary school is intrinsically related to other indicators, such as enrollment rates in primary education, dropout rates, and completion rates for both primary and secondary education. These interconnections create a comprehensive picture of the educational landscape. For instance, in regions where primary school enrollment is high but secondary school progression is low, this may indicate issues such as inadequate secondary school infrastructure, cultural factors discouraging continued education, or economic barriers faced by families. Analyzing these relationships allows policymakers to identify specific areas for intervention and improvement.

Several factors can significantly affect the progression to secondary school. Socio-economic status plays a crucial role, as families with lower income may struggle to afford the costs associated with secondary education, such as transportation, uniforms, and materials. Additionally, cultural norms and gender disparities can impact accessibility and participation in secondary education—especially in regions where girls face systemic barriers to education. In some cases, the quality of primary education can affect students’ readiness and desire to continue on to secondary levels. If students do not feel adequately prepared, they may choose to drop out or seek alternatives, which further compounds the issue.

Strategies to improve progression rates must take these various factors into account. Investing in primary educational quality ensures that children are well-prepared for the next stage of their education. Government initiatives can be put in place to subsidize costs related to secondary education, making it financially accessible for all families. Additionally, community outreach programs that promote the value of education, particularly for marginalized groups such as girls, can play a pivotal role in changing perceptions and increasing enrollment rates. Offering scholarships or creating mentorship programs can also motivate students to continue their education.

Despite the apparent importance of monitoring and enhancing progression rates to secondary school, there are inherent flaws in the methods used to capture this indicator. For instance, focusing solely on quantitative data may overlook qualitative aspects of education that are also critical to student success. Educational policies may be implemented that increase enrollment numbers without adequately addressing the quality or relevance of the curriculum. In such cases, students may progress through the system without gaining the necessary skills or knowledge to succeed, rendering the statistic indicative of enrollment rather than true educational advancement.

Analyzing the latest data reveals that in 2018, the global median for progression to secondary school stood at an impressive 99.53%. This figure is a positive reflection of the strides made in education worldwide, indicating that most children are continuing their education past primary school. Interestingly, Kazakhstan reportedly records this same median value of 99.53%, showcasing its strong education system where nearly all children transition effectively to secondary schooling.

Examining historical world values provides context for current progression rates. From a modest 77.77% in 1985, there has been a steady growth in the global figure for school progression. The increase to nearly 100% signifies a remarkable global shift toward educational access and success. Nevertheless, this data shows inconsistencies as well; while most regions are progressing towards higher rates, there remain disparities that must be addressed to ensure that educational achievements are equitable across different demographics and geographic areas.

In conclusion, 'Progression to secondary school (%)' is not merely a statistic; it encapsulates the broader narrative of educational development, societal values, and economic advancement. By understanding its significance, interrelation with other indicators, and the multifaceted factors influencing it, stakeholders can better strategize to foster an environment where all children can access and thrive in education. With continuous efforts aimed at both quality and accessibility, the goal remains clear: to ensure that every child has the opportunity to progress through their educational journey.

                    
# Install missing packages
import sys
import subprocess

def install(package):
subprocess.check_call([sys.executable, "-m", "pip", "install", package])

# Required packages
for package in ['wbdata', 'country_converter']:
try:
__import__(package)
except ImportError:
install(package)

# Import libraries
import wbdata
import country_converter as coco
from datetime import datetime

# Define World Bank indicator code
dataset_code = 'SE.SEC.PROG.ZS'

# Download data from World Bank API
data = wbdata.get_dataframe({dataset_code: 'value'},
date=(datetime(1960, 1, 1), datetime.today()),
parse_dates=True,
keep_levels=True).reset_index()

# Extract year
data['year'] = data['date'].dt.year

# Convert country names to ISO codes using country_converter
cc = coco.CountryConverter()
data['iso2c'] = cc.convert(names=data['country'], to='ISO2', not_found=None)
data['iso3c'] = cc.convert(names=data['country'], to='ISO3', not_found=None)

# Filter out rows where ISO codes could not be matched — likely not real countries
data = data[data['iso2c'].notna() & data['iso3c'].notna()]

# Sort for calculation
data = data.sort_values(['iso3c', 'year'])

# Calculate YoY absolute and percent change
data['value_change'] = data.groupby('iso3c')['value'].diff()
data['value_change_percent'] = data.groupby('iso3c')['value'].pct_change() * 100

# Calculate ranks (higher GDP per capita = better rank)
data['rank'] = data.groupby('year')['value'].rank(ascending=False, method='dense')

# Calculate rank change from previous year
data['rank_change'] = data.groupby('iso3c')['rank'].diff()

# Select desired columns
final_df = data[['country', 'iso2c', 'iso3c', 'year', 'value',
'value_change', 'value_change_percent', 'rank', 'rank_change']].copy()

# Optional: Add labels as metadata (could be useful for export or UI)
column_labels = {
'country': 'Country name',
'iso2c': 'ISO 2-letter country code',
'iso3c': 'ISO 3-letter country code',
'year': 'Year',
'value': 'GDP per capita (current US$)',
'value_change': 'Year-over-Year change in value',
'value_change_percent': 'Year-over-Year percent change in value',
'rank': 'Country rank by GDP per capita (higher = richer)',
'rank_change': 'Change in rank from previous year'
}

# Display first few rows
print(final_df.head(10))

# Optional: Save to CSV
#final_df.to_csv("gdp_per_capita_cleaned.csv", index=False)
                    
                
                    
# Check and install required packages
required_packages <- c("WDI", "countrycode", "dplyr")

for (pkg in required_packages) {
  if (!requireNamespace(pkg, quietly = TRUE)) {
    install.packages(pkg)
  }
}

# Load the necessary libraries
library(WDI)
library(dplyr)
library(countrycode)

# Define the dataset code (World Bank indicator code)
dataset_code <- 'SE.SEC.PROG.ZS'

# Download data using WDI package
dat <- WDI(indicator = dataset_code)

# Filter only countries using 'is_country' from countrycode
# This uses iso2c to identify whether the entry is a recognized country
dat <- dat %>%
  filter(countrycode(iso2c, origin = 'iso2c', destination = 'country.name', warn = FALSE) %in%
           countrycode::codelist$country.name.en)

# Ensure dataset is ordered by country and year
dat <- dat %>%
  arrange(iso3c, year)

# Rename the dataset_code column to "value" for easier manipulation
dat <- dat %>%
  rename(value = !!dataset_code)

# Calculate year-over-year (YoY) change and percentage change
dat <- dat %>%
  group_by(iso3c) %>%
  mutate(
    value_change = value - lag(value),                              # Absolute change from previous year
    value_change_percent = 100 * (value - lag(value)) / lag(value) # Percent change from previous year
  ) %>%
  ungroup()

# Calculate rank by year (higher value => higher rank)
dat <- dat %>%
  group_by(year) %>%
  mutate(rank = dense_rank(desc(value))) %>% # Rank countries by descending value
  ungroup()

# Calculate rank change (positive = moved up, negative = moved down)
dat <- dat %>%
  group_by(iso3c) %>%
  mutate(rank_change = rank - lag(rank)) %>% # Change in rank compared to previous year
  ungroup()

# Select and reorder final columns
final_data <- dat %>%
  select(
    country,
    iso2c,
    iso3c,
    year,
    value,
    value_change,
    value_change_percent,
    rank,
    rank_change
  )

# Add labels (variable descriptions)
attr(final_data$country, "label") <- "Country name"
attr(final_data$iso2c, "label") <- "ISO 2-letter country code"
attr(final_data$iso3c, "label") <- "ISO 3-letter country code"
attr(final_data$year, "label") <- "Year"
attr(final_data$value, "label") <- "GDP per capita (current US$)"
attr(final_data$value_change, "label") <- "Year-over-Year change in value"
attr(final_data$value_change_percent, "label") <- "Year-over-Year percent change in value"
attr(final_data$rank, "label") <- "Country rank by GDP per capita (higher = richer)"
attr(final_data$rank_change, "label") <- "Change in rank from previous year"

# Print the first few rows of the final dataset
print(head(final_data, 10))