← Back to story

COVID recoveryMethodology recipe

Chronic absenteeism is 7 points above pre-COVID and isn't recovering

A reproducibility log: the data this analysis touched, the queries it ran, the outside sources it leaned on, and the steps a third party would follow to re-run it.

Summary

Computed the citywide trajectory of chronic-absenteeism averages across all schools for 2018-19 (baseline), 2021-22 (full-reopening peak), and 2024-25 (latest). For each school, computed the 2018→2024 delta and counted how many schools are above their pre-COVID rate.

Data sources

  • Database tableschools

    One row per New York City public school (DBN, name, district, borough, school_type, grade_band, latest_enrollment, proclivity_decile, proclivity_score, closed_at, admission_category).

  • Database tableschool_year_metrics

    Long-format per-school per-year metric facts (school_dbn, year, metric_key, subgroup, value, suppressed). Loaded from DOE/NYSED public files via scripts/loaders/*.

Steps

  1. Citywide annual averages of chronic_absenteeism_rate (all-student subgroup) for the years of interest.

    SELECT year, AVG(value), STDDEV(value), COUNT(*)
      FROM school_year_metrics
     WHERE metric_key='chronic_absenteeism_rate' AND subgroup='ALL' AND suppressed=false
       AND year IN ('2018-19','2019-20','2020-21','2021-22','2022-23','2023-24','2024-25')
     GROUP BY year ORDER BY year;
  2. Per-school 2018-19 → 2024-25 delta. Count schools with delta > 0.

Caveats

Chronic-absenteeism methodology was the same across years (≥10% of school days absent). The 2020-21 number is partly an artifact of remote-learning attendance rules; the 2018-19 vs 2024-25 comparison is the cleanest direct read.

Reproduce

Clone the repo, set DATABASE_URL to a Postgres with the project schema loaded, run `npx tsx scripts/loaders/<source>.ts` for any not-yet-loaded data, then issue the queries in the Steps section. The story page also lists the exact `metric_key`/`subgroup`/`year` filters used. Searchable by the answer's headline number — every figure is recomputable from the queries shown.

The recipe lives at data/stories/recipes.ts in the repo. Corrections welcome.