District-run vs charter on the state's measure
Sector averages, like-for-like comparisons by school type, and within-school subgroup gaps, all on the state's Regular Attendance measure, for attendance years 2017-18 through 2023-24.
Shown in the working analysis, Figure 9
- 1How it was computed100 − state regular attendance; sector averages = school rates weighted by fixed 2024-25 enrollment (unweighted mean and median alongside); gaps = subgroup below-90 − school-wide below-90 at the same schools
- universe
- Served database: district-run and charter schools with the state's measure, attendance years 2017-18 to 2023-24 (from the 2018-19 to 2024-25 workbooks)
- packet block
- sector_state_measure
Uses: Chronic absenteeism as 100 minus the 90%-attendance share, Weighting the state's attendance measure by enrollment, Reading the state's wide-format datafile
- 2What went inInputs
- attendance_persistence_rate — served metric; its own tree covers file, load, and checks.
- enrollment — served metric; its own tree covers file, load, and checks.
- 3The generated fileThe committed data file
Generated 2026-09-08 by one script from the inputs above; the page renders only from this file.
This block’s raw values (JSON)
{ "measure": "Per school: 100 − the Future Ready PA Index 'Regular Attendance' figure (PercentPersistentAttendance in the 2021-22+ workbooks), i.e. the share of the school's students enrolled 90 or more school days who attended LESS than 90% of them (PA Dept. of Education). Sector figures are averages of these school rates (fixed 2024-25 enrollment weights, or unweighted mean/median), NOT the share of all students in the sector — the state publishes no student counts for this measure. Separate publisher and enrollment basis from the SDP-based series; do not splice.", "year_semantics": "Years are ATTENDANCE years. PDE's Future Ready glossary: Regular Attendance is 'a lagging indicator indicating data is from the year prior to the reporting year', so the 2024-25 workbook's value is 2023-24 attendance and is stored under 2023-24 (scripts/loaders/philly/_lib.ts STATE_METRIC_YEAR_OFFSET). The latest state observation is therefore 2023-24, one year behind the district's file. Corrected 2026-09-07 after an external audit.", "latest_year": "2023-24", "universe_note": "District-run (REGULAR) and charter (CHARTER) schools present in the 2024-25 school directory — the state's rows are joined to schools through that directory's CURRENT state codes, so schools closed before 2024-25 are absent from every year, and so is the earlier history of any school that changed operator or state code (e.g. John B. Stetson and Olney, Renaissance charters until 2022 and district-run since, appear in the 2018-19 workbook under charter codes 133513315-8149 and 126513452-8205 that the current crosswalk cannot join; their pre-2022 years are missing from this series). Sector and school-type classifications are the current ones, carried backward. Historical observations for schools matchable to the current directory, not a year-by-year universe of who ran which school. Contracted/alternative programs (19 schools), cyber charters, and the special-education school are excluded from both sectors. Enrollment rule (PDE glossary): only students enrolled 90 or more school days count, versus the district file's 10-day rule. The state's figure runs a median ~0.8–1.7 points above the district's for the same schools and year; the eligibility difference is a plausible contributor, but its share of that offset has not been measured (the district file has no enrollment-spell detail), and local partial-day coding is another candidate.", "selection_note": "A charter-vs-district gap is descriptive, not a measure of what charter schools do. Possible mechanisms these aggregate files cannot measure: most charters enroll by citywide lottery (Renaissance charters — former district schools run by charter operators — keep neighborhood catchments); students who leave a charter mid-year may enroll in district-run schools; the state's 90-day rule leaves out any enrollment spell shorter than 90 days, so the most mobile students are only partly represented; and PDE lets each local education agency decide how partial-day absences count. None of these is quantified here, and no Philadelphia study is cited for the attendance of mid-year leavers.", "years": [ "2017-18", "2018-19", "2019-20", "2020-21", "2021-22", "2022-23", "2023-24" ], "pandemic_years": [ "2019-20", "2020-21" ], "trend_windows": { "pre_pandemic": [ "2017-18", "2018-19" ], "in_person": [ "2021-22", "2022-23", "2023-24" ] }, "year_notes": { "2017-18": "pre-pandemic; from the 2018-19 workbook (older long format, element 'Percent Regular Attendance')", "2018-19": "pre-pandemic; from the 2019-20 workbook (older long format). Registered 2026-09-07 — an earlier version of this site wrongly stated PDE never published a 2019-20 datafile", "2019-20": "PANDEMIC: buildings closed 13 March 2020 and the year finished virtually; from the 2020-21 workbook. Shown hatched, excluded from trend statements", "2020-21": "PANDEMIC: mostly virtual, hybrid in-person from March 2021 (SDP); attendance recorded under remote rules; from the 2021-22 workbook. Shown hatched, excluded from trend statements", "2021-22": "first full in-person year; from the 2022-23 workbook. The state's figure tracks the district's for the same schools in every aligned year (cross-publisher check), so the in-person trend window is 2021-22 → 2023-24", "2023-24": "latest state observation (2024-25 workbook); the district's own file runs a year later, to 2024-25" }, "weighting_note": "weighted_by_2024_25_enrollment uses each school's 2024-25 enrollment as a fixed weight in every year (the state publishes no student counts for this measure, and enrollment is loaded for all sectors only for 2024-25) — it is an enrollment-weighted average of school rates with FIXED weights, not the share of students in the sector; mean_school/median_school are unweighted and carried alongside so the reader can see all three.", "sector_labels": { "REGULAR": "District-run schools", "CHARTER": "Charter schools" }, "directory": { "REGULAR": { "n_schools": 230, "lottery": 16, "catchment": 179, "renaissance": 0, "standalone_high": 53, "serving_high_school_grades": 63, "mixed_grade_with_high_school": 10, "k8_or_elementary_only": 164, "standalone_high_with_state_value_latest": 48 }, "CHARTER": { "n_schools": 81, "lottery": 63, "catchment": 18, "renaissance": 17, "standalone_high": 9, "serving_high_school_grades": 31, "mixed_grade_with_high_school": 22, "k8_or_elementary_only": 50, "standalone_high_with_state_value_latest": 9 } }, "trend": { "REGULAR": { "2017-18": { "n_schools": 214, "mean_school": 26.2467, "median_school": 25.2, "weighted_by_2024_25_enrollment": 24.193, "n_schools_with_enrollment_weight": 214 }, "2018-19": { "n_schools": 215, "mean_school": 26.2679, "median_school": 25, "weighted_by_2024_25_enrollment": 24.1085, "n_schools_with_enrollment_weight": 215 }, "2 … (truncated; full block in the packet file)Evidence: packet JSON · generator script
- 4How it was checkedChecked: passed
- ✓ passedEvery served state cell matches a re-read of the seven workbooks under the aligned year (full QA §B); every sector average (changing coverage and fixed panel), like-for-like figure, subgroup gap, and directory count in this block is recomputed and matched (full QA §D). Not checked: the enrollment weights and directory classifications are read from the served database, not re-derived from the district's enrollment and Master School List files; the cross-publisher check covers district-run schools from 2020-21 on, not charters or the pre-pandemic years.
The QA report behind this status · the report also lists what it does not check.
Each input metric’s own checks are on its metric tree (links above). Only the district-wide all-students series is covered by the packet’s 15 source-vs-database checks; that coverage is not claimed for any other block.
- 5Assumptions & caveatsAssumptions and caveats
- Years are attendance years: the state's indicator lags one year (PDE glossary), so its 2024-25 workbook supplies 2023-24. Corrected 2026-09-07; the earlier 'basis change at 2022-23' finding was an artifact of comparing different school years.
- The state's and district's measures are NOT interchangeable (cross-publisher check: a median offset of ~0.8–1.7 points, same sign each year; the state's 90-day enrollment rule is a plausible, unmeasured contributor); this series never mixes publishers.
- 2019-20 (buildings closed from March 2020) and 2020-21 (mostly virtual) are shown hatched and excluded from trend statements.
- 'Regular Attendance' (older workbooks) and 'PercentPersistentAttendance' (newer) are the same indicator — PDE's glossary defines it with the 90-day and 90% rules, and the aligned sweep shows it tracks the district's figure every year.
- District-run and charter schools in the 2024-25 directory only (survivor panel); contracted/alternative programs excluded from both sectors.
- The charter-vs-district gap is descriptive, not a charter effect. Possible mechanisms these files cannot measure: most charters enroll by citywide lottery (17 Renaissance charters keep neighborhood catchments); students who leave a charter mid-year may enroll in district-run schools (no Philadelphia study of their attendance is cited); the state's 90-day rule leaves out any enrollment spell shorter than 90 days; and PDE lets each local education agency decide how partial-day absences count, which has not been verified to be the same across sectors.
- Like-for-like by configuration compares stand-alone elementary, K-8, and high schools only; charters serving high-school grades inside K-12 or 6-12 configurations are left out of that comparison.
- The fixed 2024-25 weights make the 'weighted' line an average of school rates, not the share of the sector's students; the unweighted mean and median are shown so all three can be compared.
Notes carried in the data block
- measure: Per school: 100 − the Future Ready PA Index 'Regular Attendance' figure (PercentPersistentAttendance in the 2021-22+ workbooks), i.e. the share of the school's students enrolled 90 or more school days who attended LESS than 90% of them (PA Dept. of Education). Sector figures are averages of these school rates (fixed 2024-25 enrollment weights, or unweighted mean/median), NOT the share of all students in the sector — the state publishes no student counts for this measure. Separate publisher and enrollment basis from the SDP-based series; do not splice.
- universe_note: District-run (REGULAR) and charter (CHARTER) schools present in the 2024-25 school directory — the state's rows are joined to schools through that directory's CURRENT state codes, so schools closed before 2024-25 are absent from every year, and so is the earlier history of any school that changed operator or state code (e.g. John B. Stetson and Olney, Renaissance charters until 2022 and district-run since, appear in the 2018-19 workbook under charter codes 133513315-8149 and 126513452-8205 that the current crosswalk cannot join; their pre-2022 years are missing from this series). Sector and school-type classifications are the current ones, carried backward. Historical observations for schools matchable to the current directory, not a year-by-year universe of who ran which school. Contracted/alternative programs (19 schools), cyber charters, and the special-education school are excluded from both sectors. Enrollment rule (PDE glossary): only students enrolled 90 or more school days count, versus the district file's 10-day rule. The state's figure runs a median ~0.8–1.7 points above the district's for the same schools and year; the eligibility difference is a plausible contributor, but its share of that offset has not been measured (the district file has no enrollment-spell detail), and local partial-day coding is another candidate.
- selection_note: A charter-vs-district gap is descriptive, not a measure of what charter schools do. Possible mechanisms these aggregate files cannot measure: most charters enroll by citywide lottery (Renaissance charters — former district schools run by charter operators — keep neighborhood catchments); students who leave a charter mid-year may enroll in district-run schools; the state's 90-day rule leaves out any enrollment spell shorter than 90 days, so the most mobile students are only partly represented; and PDE lets each local education agency decide how partial-day absences count. None of these is quantified here, and no Philadelphia study is cited for the attendance of mid-year leavers.
- 2017-18: pre-pandemic; from the 2018-19 workbook (older long format, element 'Percent Regular Attendance')
- 2018-19: pre-pandemic; from the 2019-20 workbook (older long format). Registered 2026-09-07 — an earlier version of this site wrongly stated PDE never published a 2019-20 datafile
- 2019-20: PANDEMIC: buildings closed 13 March 2020 and the year finished virtually; from the 2020-21 workbook. Shown hatched, excluded from trend statements
- 2020-21: PANDEMIC: mostly virtual, hybrid in-person from March 2021 (SDP); attendance recorded under remote rules; from the 2021-22 workbook. Shown hatched, excluded from trend statements
- 2021-22: first full in-person year; from the 2022-23 workbook. The state's figure tracks the district's for the same schools in every aligned year (cross-publisher check), so the in-person trend window is 2021-22 → 2023-24
- 2023-24: latest state observation (2024-25 workbook); the district's own file runs a year later, to 2024-25
- weighting_note: weighted_by_2024_25_enrollment uses each school's 2024-25 enrollment as a fixed weight in every year (the state publishes no student counts for this measure, and enrollment is loaded for all sectors only for 2024-25) — it is an enrollment-weighted average of school rates with FIXED weights, not the share of students in the sector; mean_school/median_school are unweighted and carried alongside so the reader can see all three.
The numbers in this block
Sector rates on the state’s measure (share below 90% attendance)
| Year | District-run schools: weighted | school mean | median | schools | Charter schools: weighted | school mean | median | schools |
|---|---|---|---|---|---|---|---|---|
| 2017-18 | 24.2% | 26.2% | 25.2% | 214 | 18.3% | 20.1% | 19.2% | 73 |
| 2018-19 | 24.1% | 26.3% | 25.0% | 215 | 19.8% | 21.7% | 21.1% | 76 |
| 2019-20 † | 20.0% | 21.8% | 21.0% | 215 | 16.4% | 17.6% | 14.8% | 77 |
| 2020-21 † | 26.7% | 31.7% | 32.6% | 215 | 25.7% | 28.8% | 27.7% | 77 |
| 2021-22 | 38.5% | 42.1% | 42.0% | 216 | 33.7% | 36.1% | 36.1% | 77 |
| 2022-23 | 36.4% | 39.1% | 38.5% | 218 | 30.4% | 32.9% | 32.7% | 78 |
| 2023-24 | 35.7% | 38.7% | 38.5% | 219 | 26.8% | 29.0% | 27.0% | 78 |
Attendance years (the state reports each year’s attendance in the following year’s file, so 2023-24 comes from the 2024-25 workbook). † pandemic years: 2019-20 was cut short in March 2020 and 2020-21 was mostly virtual; excluded from trend statements. Weighted = each school’s rate weighted by its fixed 2024-25 enrollment in every year — an average of school rates, not the share of the sector’s students; the unweighted mean and median are alongside. The number of contributing schools changes by year (schools that closed, opened, or changed operator or state code are absent for the years they cannot be matched).
Fixed panel: schools with a value in every state year (214 district-run schools, 72 charter schools)
| Year | District-run schools: weighted | school mean | median | Charter schools: weighted | school mean | median |
|---|---|---|---|---|---|---|
| 2017-18 | 24.2% | 26.2% | 25.2% | 18.4% | 20.2% | 19.3% |
| 2018-19 | 24.1% | 26.2% | 24.8% | 19.4% | 21.3% | 19.4% |
| 2019-20 † | 20.0% | 21.7% | 20.9% | 16.3% | 17.5% | 14.7% |
| 2020-21 † | 26.7% | 31.6% | 32.5% | 25.1% | 27.9% | 26.6% |
| 2021-22 | 38.5% | 42.0% | 42.0% | 33.3% | 35.5% | 34.9% |
| 2022-23 | 36.0% | 38.9% | 38.3% | 30.1% | 32.4% | 31.8% |
| 2023-24 | 35.3% | 38.4% | 38.1% | 26.4% | 28.4% | 26.6% |
Schools with an unsuppressed all-students value in all seven state years; same fixed 2024-25 enrollment weights. A sensitivity check on the changing-coverage series above.
Like-for-like by school type, 2023-24
| Type | District-run schools | schools | Charter schools | schools |
|---|---|---|---|---|
| Elementary schools | 32.4% | 45 | 29.2% | 13 |
| K-8 schools | 33.7% | 104 | 26.5% | 30 |
| High schools | 44.6% | 48 | 37.5% | 9 |
Within-school subgroup gaps, 2023-24
| Group | District-run schools: group | same schools overall | gap | schools | Charter schools: group | same schools overall | gap | schools |
|---|---|---|---|---|---|---|---|---|
| Economically disadvantaged students | 41.2% | 38.8% | +2.5 | 218 | 30.9% | 29.3% | +1.5 | 77 |
| Students in special education | 43.7% | 38.4% | +5.3 | 215 | 32.5% | 29.0% | +3.5 | 78 |
| English learners | 28.4% | 36.8% | −8.5 | 131 | 14.4% | 24.5% | −10.1 | 38 |
| Black students | 42.0% | 38.8% | +3.2 | 217 | 30.0% | 29.1% | +0.9 | 77 |
| White students | 26.5% | 29.3% | −2.8 | 97 | 25.5% | 25.1% | +0.4 | 26 |
Both columns are unweighted averages of the reporting schools’ rates (not pooled shares of all students in the group), over schools reporting both the group and the school-wide figure; each row covers a different set of schools. The school-wide benchmark includes the group, which within any one school pulls the difference toward zero; because group shares and gap directions vary across schools, nothing can be inferred about how the averaged gap compares with an average group-versus-other-students gap. The economically-disadvantaged row is carried here as a diagnostic, not charted: the state defines the group only in general terms (district discretion over poverty indicators), and the district records most of its schools at exactly 100%, so its composition is locally defined and limits interpretation.
State vs district figure for the same district-run schools, same attendance year
| Attendance year | State workbook | Schools | Median gap (state − district, below-90 share) | Within 1 | Within 5 | Differ by more than 10 | Correlation |
|---|---|---|---|---|---|---|---|
| 2020-21 | 2021-22 | 212 | −0.8 | 61.8% | 99.1% | 0 | 0.998 |
| 2021-22 | 2022-23 | 213 | −1.7 | 21.6% | 94.8% | 0 | 0.993 |
| 2022-23 | 2023-24 | 215 | −1.7 | 22.3% | 97.7% | 0 | 0.996 |
| 2023-24 | 2024-25 | 216 | −1.7 | 27.8% | 97.2% | 0 | 0.995 |
Negative = the state shows fewer students below 90% than the district’s file. The median offset is similar in every year; the state’s 90-day enrollment rule is a plausible contributor but its share of the offset has not been measured. District-run schools only. Before 2026-09-07 this table compared the state’s workbook year to the district’s attendance year — different school years — and showed ~11-point gaps that the site wrongly called a change in the state’s rules; the misaligned comparison is preserved in the cross-publisher report as a diagnostic.
Every school behind this figure
The state's measure: share of each school's students attending less than 90% of days (100 minus the state's regular-attendance figure), by attendance year. Years marked † are pandemic years (2019-20 cut short in March 2020; 2020-21 mostly virtual). Click any value for its full trace. 298 schools.