Skip to content
← All datasets

Retained (Held-Back) K-12 Students

Students held back a grade in Georgia public schools, with counts and the race/gender makeup of the retained group, by school and district, 2004-2024.

Year coverage
20042024
Updated
annual
Version
1.0.0
Schema hash
9a026e84857d

Detail levels available

StateDistrictSchool · default

Overview

Georgia Office of Student Achievement (GOSA) Retained K-12 dataset. For every Georgia public school, school district, and the state as a whole, reports the total number of students retained (held back) in grades K-12 during the school year, the total K-12 enrollment (2011 onward only), and a demographic breakdown of the retained population — counts and shares of retained by race and gender. The race axis carries six canonical codes (`native_american`, `asian_pacific_islander` — the bronze `Asian`/`Asians` label is a combined Asian/Pacific Islander bucket, with no separate Pacific Islander row — `black`, `hispanic`, `multiracial`, `white`); gender is `male`/`female`. Coverage spans the 2003-04 school year (filename year 2004) through the 2023-24 school year (filename year 2024) — 21 files.

Row grain: One row per year, district_code, school_code, demographic.

Key metric

pct_of_retained_cohortPercent of Retained Cohort (proportion)

The single headline value most answers want.

Variables

Every column in the fact table. The code is the exact field name the API returns.

ColumnTypeUnitRangeNull?Description
yearYearintegernoEnding calendar year of the school year (2024 = 2023-2024). Sourced from the bronze `School Year` / `School_Year` column for 2011-2024 (cross-checked against the filename); from the filename for 2004-2010 (no year column in those eras).
Full description
Ending calendar year of the school year (2024 = 2023-2024). Sourced from the bronze `School Year` / `School_Year` column for 2011-2024 (cross-checked against the filename); from the filename for 2004-2010 (no year column in those eras).
district_codeDistrict Codestringyes3-digit GOSA district code (zero-padded) for standard districts; 7-digit code for state charter / state school networks. NULL for state-level aggregate rows. FK to districts dimension.
Full description
3-digit GOSA district code (zero-padded) for standard districts; 7-digit code for state charter / state school networks. NULL for state-level aggregate rows. FK to districts dimension.

Joins districts; adds its label columns.

school_codeSchool Codestringyes4-digit GOSA school code (zero-padded). NULL for district- and state-level aggregate rows. FK to schools dimension (composite key with district_code).
Full description
4-digit GOSA school code (zero-padded). NULL for district- and state-level aggregate rows. FK to schools dimension (composite key with district_code).

Joins schools; adds its label columns.

demographicDemographicstringnoStudent subgroup the row covers (race or gender); 'all' is the whole retained group. Race uses the combined asian_pacific_islander bucket.
Full description
Canonical demographic code (FK to demographics dimension). `all` is the overall retained cohort; race uses the combined `asian_pacific_islander` bucket (pre-1997 OMB convention: the six race-bucket retained counts sum exactly to the total retained at the state row in every year, so Pacific Islanders are folded in, never published separately); gender is `male`/`female`. Race values are mutually exclusive with each other, as are gender values; `all` overlaps both axes.
9 allowed values
  • all
  • asian_pacific_islander
  • black
  • female
  • hispanic
  • male
  • multiracial
  • native_american
  • white

Joins demographics; adds its label columns.

num_retainedNumber RetainedintegercountyesNumber of K-12 students in this demographic at this entity who were retained (held back) during the school year. For `demographic = all`, the total retained count. NULL when suppressed.
Full description
Number of K-12 students in this demographic at this entity who were retained (held back) during the school year. For `demographic = all`, the total retained count. NULL when suppressed.
num_studentsNumber StudentsintegercountyesTotal K-12 enrollment at this entity. Populated only on `demographic = all` rows in 2011 and 2013-2024. NULL for every non-`all` row (bronze publishes no per-demographic enrollment) and for every row in 2004-2010 (the wide-era bronze publishes no enrollment at all — its total columns are retained counts). 2012 is fully NULL: the 2012 bronze `Total Enrolled` is corrupt (inflated ~17x at every detail level, state row 27,864,309 vs ~1.65M expected) and is NULLed per the known-source-defect rule; 2012 `num_retained` is internally consistent and preserved. With `num_retained` on `all` rows this yields an overall retention rate.
Full description
Total K-12 enrollment at this entity. Populated only on `demographic = all` rows in 2011 and 2013-2024. NULL for every non-`all` row (bronze publishes no per-demographic enrollment) and for every row in 2004-2010 (the wide-era bronze publishes no enrollment at all — its total columns are retained counts). 2012 is fully NULL: the 2012 bronze `Total Enrolled` is corrupt (inflated ~17x at every detail level, state row 27,864,309 vs ~1.65M expected) and is NULLed per the known-source-defect rule; 2012 `num_retained` is internally consistent and preserved. With `num_retained` on `all` rows this yields an overall retention rate.
pct_of_retained_cohortPercent of Retained CohortnumberproportionyesShare of this entity's retained students who are in this demographic, on a 0-1 scale; a makeup share, NOT a retention rate, and NULL on the 'all' row.
Full description
Share of the entity's total retained cohort who belong to this demographic, 0-1 scale (bronze 0-100 divided by 100; whole-percent precision in 2011-2024). NOT a within-demographic retention rate. In 2009 the published White and Multiracial percent columns are corrupt (both repeat the Male share); for those two demographics in 2009 the share is derived as num_retained / total retained from the internally consistent counts instead.

Filters

Query parameters the fact endpoint accepts. Comma-separated values are OR within a parameter; multiple parameters AND together.

ParameterKindAllowed valuesNotes
yearyear_exactany value
year_minyear_rangeany value
year_maxyear_rangeany value
detaildetaildistrictsschoolsstatesenum-enforced, default: schools
district_codeforeign_keyany valuemulti-value
school_codeforeign_keyany valuemulti-value
demographicforeign_key
9 allowed values
  • all
  • asian_pacific_islander
  • black
  • female
  • hispanic
  • male
  • multiracial
  • native_american
  • white
multi-value, enum-enforced
district_typedimension_attribute
7 allowed values
  • commission_charter
  • resa
  • standard
  • state_agency
  • state_charter
  • state_school
  • state_special
multi-value, enum-enforced
demographic_categorydimension_attribute
12 allowed values
  • aggregate
  • disability
  • economic_status
  • esol
  • foster_care
  • gender
  • grade
  • homeless_status
  • migrant_status
  • military
  • race
  • sped
multi-value, enum-enforced

Example requests

Run these against the base URL — they return live data.

All rows (first page), schools level

curl "https://georgiacivicdata.org/api/v1/education/retained_students"

schools data for 2024

curl "https://georgiacivicdata.org/api/v1/education/retained_students?year=2024"

One district (code 601), 2024

curl "https://georgiacivicdata.org/api/v1/education/retained_students?district_code=601&year=2024&detail=districts"

Download 2024 as CSV

curl "https://georgiacivicdata.org/api/v1/education/retained_students?year=2024&format=csv"

Notes & limitations

NULL handling

  • Suppressed cells (too few students to report) are NULL, never zero.
  • Zero is a real, reported value.

Limitations

`num_students` (total K-12 enrollment) is available only on `demographic = all` rows for 2011 and 2013-2024. It is NULL for every non-`all` demographic row (bronze has no per-demographic enrollment), for every row in 2004-2010 (the wide-format bronze publishes no enrollment column), and for all of 2012 (corrupt bronze `Total Enrolled`, inflated ~17x, is NULLed); 8 2016 `all` rows are also NULL where source enrollment was unpublished. An overall retention rate (`num_retained` / `num_students`) is therefore computable only on `demographic = all` rows in 2011 and 2013-2024. `pct_of_retained_cohort` is a SHARE of the total retained cohort that belongs to each demographic (it sums toward 1.0 across race demographics and across gender demographics within an entity), NOT a within-demographic retention rate; it is NULL on `demographic = all` rows (100% by definition). Suppressed cells (cohort below the privacy threshold) null `num_retained` and `pct_of_retained_cohort`.