Repeaters, primary, total (% of total enrollment)

Source: worldbank.org, 03.09.2025

Year: 2018

Flag Country Value Value change, % Rank
Afghanistan Afghanistan 4.08 +10.8% 27
Albania Albania 0.848 -8.36% 54
Andorra Andorra 0.74 -24.9% 56
Armenia Armenia 0.273 +6% 68
Antigua & Barbuda Antigua & Barbuda 1.37 -23.3% 49
Azerbaijan Azerbaijan 0.128 +85.8% 69
Burundi Burundi 25.7 +7.66% 2
Benin Benin 15.1 +52.4% 6
Burkina Faso Burkina Faso 5.7 -10.2% 22
Bangladesh Bangladesh 4.14 -12.7% 26
Bahrain Bahrain 0.328 -5.25% 66
Bahamas Bahamas 3.23 -2.92% 30
Bosnia & Herzegovina Bosnia & Herzegovina 0.0929 -34.2% 70
Belarus Belarus 0.043 -1.65% 76
Belize Belize 6.68 -1.38% 18
Bolivia Bolivia 2.26 -0.894% 36
Brunei Brunei 0.0811 -70.8% 71
Bhutan Bhutan 7.3 +54.6% 17
China China 0.0075 -45.6% 79
Cameroon Cameroon 12.2 +0.495% 9
Colombia Colombia 1.8 -19.5% 44
Comoros Comoros 16 -3.83% 4
Cape Verde Cape Verde 7.75 -4.66% 15
Costa Rica Costa Rica 2.31 -17.1% 35
Cuba Cuba 0.449 -2.2% 63
Cayman Islands Cayman Islands 0 -100% 81
Djibouti Djibouti 8.67 -14.4% 12
Dominican Republic Dominican Republic 4.64 -1.38% 24
Algeria Algeria 5.5 -2.79% 23
Ecuador Ecuador 0.471 -30.8% 61
Egypt Egypt 2.11 -9.97% 38
Eritrea Eritrea 8.12 +3.42% 14
Georgia Georgia 0.39 +55.4% 65
Ghana Ghana 1.81 +0.00609% 43
Grenada Grenada 2.4 -19.5% 34
Guatemala Guatemala 9.01 -4.93% 11
Hong Kong SAR China Hong Kong SAR China 0.402 -5.87% 64
Indonesia Indonesia 1.33 -5.36% 50
India India 0.596 +5.3% 57
Jamaica Jamaica 2.84 -2.57% 32
Jordan Jordan 1.15 -13% 52
Kazakhstan Kazakhstan 0.0444 +26.4% 75
Kyrgyzstan Kyrgyzstan 0.0189 -30.3% 77
Cambodia Cambodia 6.38 -0.99% 19
Kuwait Kuwait 0.515 +1.79% 59
Laos Laos 4.15 -1.28% 25
Lebanon Lebanon 6.27 -10.9% 20
St. Lucia St. Lucia 2.91 -14.9% 31
Macao SAR China Macao SAR China 1.7 -16.5% 45
Morocco Morocco 10.1 -3.11% 10
Monaco Monaco 2.12 +435% 37
Moldova Moldova 0 81
Madagascar Madagascar 26.1 +22.1% 1
Myanmar (Burma) Myanmar (Burma) 0.48 +62.7% 60
Montenegro Montenegro 0.316 -35.3% 67
Mongolia Mongolia 0.0601 -45.5% 74
Mozambique Mozambique 8.65 -7.58% 13
Mauritania Mauritania 1.7 -29.1% 46
Mauritius Mauritius 0.01 -98.5% 78
Namibia Namibia 15.7 +5.29% 5
Oman Oman 0 -100% 81
Pakistan Pakistan 1.86 -16.9% 42
Peru Peru 2.74 +1.61% 33
Palestinian Territories Palestinian Territories 0.0711 -7.33% 73
Rwanda Rwanda 13.6 -15.8% 7
Saudi Arabia Saudi Arabia 1.23 -10.3% 51
Senegal Senegal 3.59 +155% 29
Solomon Islands Solomon Islands 5.78 -15% 21
Sierra Leone Sierra Leone 1.48 -76.1% 47
El Salvador El Salvador 3.78 +17.5% 28
San Marino San Marino 0 81
Serbia Serbia 0.56 -15.5% 58
Suriname Suriname 16.4 -2.19% 3
Turks & Caicos Islands Turks & Caicos Islands 2.09 -55.1% 39
Togo Togo 7.56 -2.15% 16
Thailand Thailand 1.39 -19% 48
Timor-Leste Timor-Leste 13.4 -10.6% 8
Tuvalu Tuvalu 0.453 +500% 62
Tanzania Tanzania 1.87 -58.5% 41
Ukraine Ukraine 0.0727 +3.06% 72
Uzbekistan Uzbekistan 0.00125 -39% 80
St. Vincent & Grenadines St. Vincent & Grenadines 2.06 -27.1% 40
Vietnam Vietnam 0.82 +1.29% 55
Samoa Samoa 0.99 -13.5% 53

The indicator of 'Repeaters, primary, total (% of total enrollment)' measures the percentage of students who do not progress to the next grade after completing one grade level in primary education. This metric is crucial as it directly reflects the quality and accessibility of education systems around the globe. When repeaters make up a significant portion of total enrollment, it often signals underlying issues in the educational framework, including curriculum effectiveness, teaching quality, and social factors influencing student learning and progression.

Understanding the importance of this indicator begins with its implications for educational equity and inclusivity. A high rate of repeaters may indicate barriers faced by students, such as poverty, lack of resources, and inadequate school facilities, which can severely impact their learning experience. If a large number of students find themselves repeating grades, it could lead to increased frustration and a decreased likelihood of eventual completion of their primary education. Furthermore, the sustainability of educational institutions may be jeopardized if systemic issues persist and prevent students from moving forward.

The relationships of this indicator to other educational metrics are also significant. For instance, a high percentage of repeaters often correlates with lower graduation rates and higher drop-out rates. Reduced progression can extend the time students spend in the education system, which diverts resources and may cause overcrowding in classrooms with repeaters. Conversely, a lower percentage of repeaters may indicate an effective educational system that supports all students in reaching their educational goals.

Several factors can impact the rate of repeaters in primary education. These factors can be broadly categorized into socio-economic influences, teaching practices, and systemic barriers within the education system. Socioeconomic status plays a critical role; children from low-income families or marginalized communities often face additional challenges that affect their ability to thrive academically. Moreover, ineffective teaching methods or lack of qualified educators can lead to an environment where students struggle to understand material, leading to increased retention.

Systemic barriers such as inadequate funding for schools, a shortage of educational materials, and insufficient infrastructure can also contribute to higher rates of repeaters. Without the appropriate support systems in place, students may find it difficult to progress and therefore become part of the repeating cohort.

To combat high rates of repeaters, several strategies and solutions can be implemented. Improving teacher training and professional development is essential for equipping educators with effective teaching methodologies that cater to diverse learning needs. Additionally, implementing early intervention programs can help identify at-risk students and provide them with specialized support before they fall behind. These initiatives can ensure that all children are given a fair chance to succeed in their education.

Moreover, community engagement is crucial in fostering an environment where education is valued and accessible. Parents and community members should be involved in developing educational policies that meet the unique needs of their children. Providing economic support and resources to low-income families can alleviate some burdens that hinder children's educational progress, allowing them to focus more on their studies without the stress of financial instability.

Despite the importance of addressing repeaters in primary education, some flaws persist in current methodologies. Data collection and monitoring practices can sometimes be inconsistent, leading to inaccurate assessments of the repeaters' situation and the overall health of the education system. Additionally, the pressures during economic downturns can lead to cuts in educational funding, which disproportionately affect programs designed to support struggling students.

Analyzing data from 2019, the global median percentage of repeaters in primary education stood at 0.9%. This figure indicates a slight improvement compared to earlier decades, showcasing a general trend of decreased repeaters over time, from a troubling high of 9.91% in 1970. This downward trajectory illustrates advancements in educational methods and policies, but highlights the persistent challenges that remain.

When examining various regions, significant disparities become apparent. For instance, Nepal had a remarkably high repeater rate of 7.6%, positioning it at the top of the list of areas with high repetitions. This suggests considerable systemic issues and the urgent need for targeted interventions to support primary education in the country. In contrast, Monaco, with a repeater rate of 0.9%, reflects an affluent educational system that ensures high-quality learning environments without the substantial social hurdles faced by areas like Nepal.

Kazakhstan demonstrated a notably low repeater rate of 0.04%, indicating an effective educational framework that supports student progression. This notable achievement could serve as a model for other regions aiming to enhance their educational systems. However, it also underscores a key point—addressing the issue of repeaters requires a tailored approach, as solutions that work in one country may not be effective in another due to different socio-economic and cultural contexts.

In conclusion, the indicator of repeaters in primary education serves as an essential metric for evaluating educational effectiveness and equity across different regions. While global trends show improvements over the years, the disparities observed in various countries stress the necessity for continuous reform and support systems that address the specific needs of each community. By focusing on teacher training, resource allocation, and community engagement, systems can become more resilient and supportive, ultimately reducing the percentage of repeaters and fostering a more educated global population.

                    
# 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.PRM.REPT.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.PRM.REPT.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))