PNAD / PNAD Contínua Harmonization, 1992–2025

Overview
Twenty-one of the figures in this catalog do not read from a single household survey — they read from a harmonized panel that splices two different surveys into one internally consistent series: PNAD Anual (Brazil’s main annual household survey, 1992–2015) and PNAD Contínua (the continuous survey that replaced it, 2016–2025). Combining them lets every figure in this catalog treat 1992–2025 as one comparable stretch of time, instead of two incompatible fragments. This page documents that harmonization itself — the sources, the decisions, the resulting variables, and how the result was validated — rather than any single figure built on top of it.
Methodology
Data sources. PNAD Anual (1992–2011, collected by IBGE) provides annual microdata on income, education, and labor-market outcomes; its rural North was excluded in 2004–2015 for comparability with PNAD Contínua’s initial geographic coverage. PNAD Contínua (2012–2025) is the redesigned continuous survey, with a more complex sample design (rotating panels, stratified primary sampling units) requiring exact complex-survey estimation via survey::svydesign(). Decennial Demographic Censuses (1991, 2000, 2010, 2022), accessed via the censobr R package, are used separately as independent validation points — not as part of the harmonized panel itself.
Key methodological decisions. A numbered decision log documents every consequential choice made while harmonizing the two surveys. The most important:
| Decision | Description |
|---|---|
| D01 | Deflate all monetary values to January 2024 prices using the IPCA (via deflateBR) |
| D02 | Exclude observations with zero per-capita household income |
| D03 | Exclude the rural North (Brazilian states 11–16) from PNAD Anual 2004–2015, for comparability with PNAD Contínua’s initial coverage |
| D11 | Exclude 2020–2021 from the harmonized series (pandemic-era PNAD Contínua data-quality issues) |
| D19 | Tertiary enrollment indicator = currently enrolled (a separate variable from ever-enrolled) |
| D20 | Treat the PNAD 1992–1999 non-declared-income sentinel code as missing at import, rather than letting it rank at the top of the income distribution |
| D21 | Retain each survey’s own income-aggregation unit across the splice — family in PNAD Anual, household in PNAD Contínua — rather than rebuilding both on a single unit |
Resulting datasets and variables. The pipeline produces two analysis-ready files: the 18–24 age subset used for tertiary-access figures, and the full population with valid income, used for income-decile construction. Both are restricted to individuals with strictly positive per-capita household income; PNAD Contínua is restricted to first-interview respondents to avoid its panel structure inflating sample size. The series covers 1992–1999, 2001–2009, 2011–2019, and 2022–2025 — 2000 and 2010 are absent because no PNAD was fielded in census years. Core variables include income (nominal and inflation-adjusted), a tertiary-education access indicator validated against an external reference series to within ±0.3 percentage points nationally, income decile and vintile (computed within each year and source, using sampling weights), and a source flag (2012–2015 exists in both surveys, an intentional overlap kept to validate the splice — any analysis spanning those years must pick one source to avoid double-counting).
External validation. The harmonized tertiary-access series was benchmarked against the independent series of Salata et al. (2025), which uses a different data-processing pipeline entirely. After correcting two coding errors — the original construction had omitted respondents who already completed or withdrew from tertiary education, concentrated in the top income decile; and, found in a code audit on 2026-09-15, the 2001–2006 PNAD dictionaries code university-entrance preparation (pré-vestibular) under the number that the 1990s dictionaries use for graduate study, so that for six years entrance-exam students had been counted as tertiary entrants (about +1.5 percentage points nationally, up to +4.8 in the top decile) — the two series agree closely across the full window:
| Period | Source | Difference vs. reference | Assessment |
|---|---|---|---|
| 1992–1999 | PNAD histórica | −0.08 to +0.09 pp | Aligned |
| 2001–2003 | PNAD Anual | −0.16 to −0.04 pp | Aligned |
| 2004–2006 | PNAD Anual | +0.16 to +0.24 pp | Aligned — rural North exclusion |
| 2007–2015 | PNAD Anual | +0.09 to +0.33 pp | Aligned |
| 2016–2019 | PNAD Contínua | −0.01 to −0.08 pp | Aligned |
| 2022 | PNAD Contínua | −0.71 pp | Acceptable — rural North retained |
No artificial break was detected at the PNAD/PNAD Contínua splice point (2012–2015), where the two sources independently track the reference series within 0.4 percentage points of each other.
How to Cite
If you use this harmonized panel or the pipeline behind it, please cite both the dissertation and this specific analysis. References follow APA 7th edition.
Dissertation (in preparation; the entry will be updated after the defense):
Mançano, T. (2026). Inequality in access to tertiary education in Brazil: Household incomes, reforming policies, and the politics of who gets in (1990s–2020s) [Unpublished master’s thesis]. University of São Paulo.
This harmonized panel and pipeline:
Mançano, T. (2026, September 10). PNAD / PNAD Contínua harmonization, 1992–2025 [Harmonized dataset and reproducible pipeline]. Open Data Analysis. https://mancano-tales.github.io/open-data-analysis/posts/harmonizacao-pnad-pnadc/
In text: (Mançano, 2026) — when citing several analyses from this catalog in the same work, APA distinguishes them as 2026a, 2026b, … in the order they appear in the reference list.
BibTeX:
@mastersthesis{Mancano2026Thesis,
author = {Man\c{c}ano, Tales},
title = {Inequality in Access to Tertiary Education in Brazil: Household
Incomes, Reforming Policies, and the Politics of Who Gets In
(1990s--2020s)},
school = {University of S\~{a}o Paulo},
year = {2026},
type = {Master's thesis},
note = {Unpublished; Graduate Program in Political Science}
}
@misc{Mancano2026_harmonizacao_pnad_pnadc,
author = {Man\c{c}ano, Tales},
title = {PNAD / PNAD Cont\'{\i}nua harmonization, 1992--2025},
year = {2026},
month = sep,
howpublished = {Open Data Analysis, \url{https://mancano-tales.github.io/open-data-analysis/posts/harmonizacao-pnad-pnadc/}},
note = {Harmonized dataset and reproducible pipeline. Source code: \url{https://github.com/mancano-tales/open-data-analysis}, folder posts/harmonizacao-pnad-pnadc/. Accessed YYYY-MM-DD}
}A permanent version (Git tag + Zenodo DOI) will be linked here once the dissertation is defended; until then, cite the page URL above and add the date you accessed it (source code: https://github.com/mancano-tales/open-data-analysis, folder posts/harmonizacao-pnad-pnadc/).
Pipeline
Scripts for this harmonization, run in order:
shared-pipeline/pnadc/000_PNADC_Download_Consolidate.R— downloads and consolidates PNAD Contínua, 2012–2025shared-pipeline/pnadc/020_PNAD_Anual_Manual_Import_2001_2015.R— imports PNAD Anual 2001–2015 from raw SAS-format microdatashared-pipeline/pnadc/050_PNAD_Historica_Manual_Import_1992_1999.R— imports PNAD Anual 1992–1999shared-pipeline/pnadc/021_PNAD_Anual_Import_Com_Renda_Zero.R— alternative PNAD Anual import, used by a subset of figuresshared-pipeline/pnadc/035_Splice_Microdados.R— splices everything above into the two harmonized analytic datasetsshared-pipeline/utils/codigos_curso_pnad.R— course-code lookup for PNAD Anual by dictionary regime (1992–99 / 2001–06 / 2007+), sourced by 035 and by the network-level postsshared-pipeline/pnadc/238_Serie_Desigualdade_Oficial.R— derives the official income-inequality series (Gini, Palma) from the harmonized panelshared-pipeline/censo/040_Censo_Pontos_Validacao.R— independent Demographic Census validation points (not part of the panel itself)
Or run shared-pipeline/build_public_data.R, which sources these in the correct order automatically.
Figures in this catalog built on this harmonization: every post tagged “PNAD/PNADC” links back to this page from its own Pipeline section.
Reproducibility
Tier: A
This pipeline uses only public data, accessible via package/API without any credential (PNADcIBGE, censobr). Run the scripts above — or shared-pipeline/build_public_data.R — in order to reconstruct the harmonized panel from scratch.