Skip to contents

Overview

The SIH (Sistema de Informacoes Hospitalares) records all hospital admissions financed by the Brazilian public health system (SUS) through the Autorizacao de Internacao Hospitalar (AIH). It is managed by the Ministry of Health through DATASUS.

Feature Details
Coverage Per state (UF), all 27 states
Years 2008–2024
Granularity Monthly (one file per UF/month)
Unit One row per hospital admission (AIH)
Format .dbc files from DATASUS FTP

Getting started

Check available years

sih_years()
sih_years(status = "all")

Module information

Downloading data

Basic download

# All months of 2022 for Acre
admissions <- sih_data(year = 2022, uf = "AC")

Specific months

# First semester only
admissions <- sih_data(year = 2022, uf = "SP", month = 1:6)

# Single month
admissions <- sih_data(year = 2022, uf = "SP", month = 3)

Filter by diagnosis

Use CID-10 code prefixes to filter the principal diagnosis:

# Acute myocardial infarction (I21)
mi <- sih_data(year = 2022, uf = "SP", diagnosis = "I21")

# All respiratory diseases (Chapter X)
respiratory <- sih_data(year = 2022, uf = "SP", diagnosis = "J")

# Dengue (A90-A91)
dengue_hosp <- sih_data(year = 2022, uf = "SP", diagnosis = "A9")

Select variables

admissions <- sih_data(
  year = 2022,
  uf = "SP",
  month = 1,
  vars = c("DIAG_PRINC", "DT_INTER", "DT_SAIDA", "SEXO",
           "MORTE", "MUNIC_RES", "VAL_TOT")
)

Key variables

Variable Description
DIAG_PRINC Principal diagnosis (CID-10)
DT_INTER Admission date
DT_SAIDA Discharge date
SEXO Sex (0=Unknown, 1=Male, 3=Female)
NASC Date of birth
MORTE Hospital death (0=No, 1=Yes)
MUNIC_RES Municipality of residence (IBGE code)
MUNIC_MOV Municipality of hospitalization
VAL_TOT Total AIH value (R$)
DIAS_PERM Length of stay (days)
PROC_REA Procedure performed (SIGTAP code)
UTI_MES_TO ICU days

Note: Sex codes in SIH differ from SIM/SINASC (0=Unknown, 1=Male, 3=Female).

Data dictionary

Explore variables

sih_variables()
sih_variables(search = "diag")
sih_variables(search = "valor")

Example: Hospital mortality by diagnosis chapter

admissions <- sih_data(year = 2022, uf = "SP", month = 1:6)

mortality <- admissions |>
  mutate(chapter = substr(DIAG_PRINC, 1, 1)) |>
  group_by(chapter) |>
  summarise(
    total = n(),
    deaths = sum(MORTE == "1", na.rm = TRUE),
    mortality_rate = deaths / total * 100
  ) |>
  arrange(desc(mortality_rate))

Example: Hospitalization costs

admissions <- sih_data(year = 2022, uf = "SP", month = 1)

costs <- admissions |>
  mutate(
    chapter = substr(DIAG_PRINC, 1, 1),
    cost = as.numeric(VAL_TOT)
  ) |>
  group_by(chapter) |>
  summarise(
    admissions = n(),
    total_cost = sum(cost, na.rm = TRUE),
    mean_cost = mean(cost, na.rm = TRUE)
  ) |>
  arrange(desc(total_cost))

Example: Seasonal patterns

# respiratory admissions across all months
resp <- sih_data(year = 2022, uf = "SP", diagnosis = "J")

seasonal <- resp |>
  count(month, name = "admissions") |>
  arrange(month)

Smart type parsing

# parsed types (default)
admissions <- sih_data(year = 2022, uf = "AC", month = 1)
class(admissions$DT_INTER)  # Date
class(admissions$VAL_TOT)   # double

# all character
admissions_raw <- sih_data(year = 2022, uf = "AC", month = 1, parse = FALSE)

Cache and lazy evaluation

sih_cache_status()
sih_clear_cache()

# lazy query
lazy <- sih_data(year = 2022, uf = "SP", lazy = TRUE)
lazy |>
  filter(MORTE == "1") |>
  select(DIAG_PRINC, DT_INTER, SEXO, MUNIC_RES) |>
  collect()

Further reading

  • SIH on DATASUS (datasus.saude.gov.br)
  • SIGTAP procedure table (wiki.saude.gov.br/sigtap)
  • SIA vignette for outpatient data