O microdatasus baixa, lê e prepara microdados dos Sistemas de Informação em Saúde publicados pelo DataSUS. O pacote trabalha diretamente com arquivos DBC, seleciona os arquivos efetivamente disponíveis no servidor e oferece funções específicas para recodificar variáveis de SIM, SINASC, SIH, SIA, CNES e SINAN.
O pacote resolve a parte operacional do acesso aos dados. Para compreender a unidade de análise, a cobertura, os fluxos de produção e os cuidados de interpretação de cada sistema, consulte o livro Sistemas de Informação em Saúde no Brasil.
O que o pacote oferece
-
fetch_datasus()localiza, baixa e combina microdados publicados pelo DataSUS; também pode processar e salvar cada arquivo separadamente. -
read_dbc()lê diretamente um arquivo DBC já disponível no computador, validando estrutura e CRC32 sem gravar um DBF intermediário. - As funções
process_*()interpretam os arquivos oficiais DEF, CNV e DBF do TabWin, selecionam definições históricas por registro, padronizam tipos e podem relatar códigos ainda não mapeados. -
datasus_variables()consulta relações oficiais,datasus_schema()cria contratos por campo,validate_datasus_schema()confronta DBC, DEF e tipos produzidos, eaudit_datasus_dictionaries()verifica todas as definições ecompare_datasus_dictionary()identifica mudanças entre versões. -
fetch_cadger()efetch_sigtab()obtêm tabelas auxiliares atuais de CNES e SIA. -
datasus_reference_tables()torna explícita a origem das tabelas legadas;datasus_lockfile()registra everify_datasus_lockfile()confere os arquivos usados em uma análise.
Os downloads fazem novas tentativas em falhas transitórias e podem usar um cache persistente, com checksum e proveniência. Quando stop_on_error = FALSE, os arquivos válidos podem ser retornados mesmo que parte da solicitação falhe.
Instalação
Este README acompanha a versão de desenvolvimento 3.0.0.9000; a versão publicada no CRAN pode oferecer um conjunto diferente de recursos.
Instale a versão estável publicada no CRAN:
install.packages("microdatasus")Ou instale a versão de desenvolvimento:
# install.packages("remotes")
remotes::install_github("rfsaldanha/microdatasus", ref = "dev")A leitura de DBC é interna ao pacote, não chama foreign::read.dbf() e não depende mais de read.dbc. A implementação foi adaptada do pacote healthbR. O pacote mantém foreign apenas para tabelas DBF auxiliares ou referenciadas pelos dicionários TabWin; esses arquivos não fazem parte do caminho de leitura de um DBC.
Windows
No Windows, a instalação pelo GitHub compila o código C do pacote e requer o Rtools compatível com o R instalado. A versão binária distribuída pelo CRAN não requer ferramentas de compilação.
Se você recebeu do mantenedor um binário DEV .zip para Windows, instale-o sem descompactar. Confirme que ele é compatível com a versão e a arquitetura do seu R, consultáveis com R.version.string e R.version$arch. Esse binário também dispensa Rtools, mas a instalação de um arquivo local não resolve as dependências automaticamente. Em uma sessão nova do R:
# Instala ou atualiza as dependências usando binários do CRAN
install.packages(
c("cli", "curl", "data.table", "digest", "dplyr", "foreign",
"magrittr", "stringi", "tibble", "zip"),
repos = "https://cloud.r-project.org",
type = "win.binary"
)
# Selecione o .zip binário fornecido pelo mantenedor
install.packages(file.choose(), repos = NULL, type = "win.binary")
library(microdatasus)
packageVersion("microdatasus")A versão DEV requer dplyr >= 1.2.0. O primeiro comando precisa de internet; a instalação do .zip pode ser feita sem conexão se todas as dependências já estiverem instaladas. O mantenedor pode gerar esses binários com o Win-builder.
Primeiro download
O fluxo mais comum tem duas etapas: baixar os arquivos e aplicar o processador do sistema.
library(microdatasus)
sim_raw <- fetch_datasus(
year_start = 2022,
year_end = 2022,
uf = "AC",
information_system = "SIM-DO",
vars = c("CODMUNRES", "DTOBITO", "CAUSABAS"),
track_source = TRUE
)
if (!is.null(sim_raw)) {
sim <- process_sim(sim_raw)
} else {
message("Nenhum registro foi obtido; confira os avisos do download.")
}process_sim() usa SIM-DO por padrão. Para os subconjuntos nacionais, informe o mesmo tipo usado no download, por exemplo process_sim(sim_fetal_raw, information_system = "SIM-DOFET"). O resultado padroniza datas como Date, quantidades como inteiros e variáveis rotuladas como fatores.
Os anos, meses e UFs solicitados identificam as partições publicadas pelo DataSUS. A data e o local analíticos devem ser escolhidos nas variáveis do registro. O capítulo sobre o SIM, por exemplo, distingue residência, ocorrência e outras dimensões territoriais e temporais do óbito.
Sistemas mensais, como SIH, SIA e CNES, exigem os meses inicial e final:
sih_raw <- fetch_datasus(
year_start = 2023,
month_start = 1,
year_end = 2023,
month_end = 2,
uf = c("AC", "RO"),
information_system = "SIH-RD",
timeout = 600
)
if (!is.null(sih_raw)) {
sih <- process_sih(sih_raw)
}Sistemas suportados
| Sistema | Periodicidade dos arquivos | Download | Processamento | Livro de SIS |
|---|---|---|---|---|
| SIM | Anual |
SIM-DO, SIM-DOFET, SIM-DOEXT, SIM-DOINF, SIM-DOMAT
|
process_sim() |
SIM |
| SINASC | Anual | SINASC |
process_sinasc() |
SINASC |
| SIH | Mensal |
SIH-RD, SIH-RJ, SIH-SP, SIH-ER
|
process_sih() |
SIH |
| SIA | Mensal | Doze layouts SIA-*
|
process_sia() |
SIA |
| CNES | Mensal | Treze layouts CNES-*
|
process_cnes() para os treze layouts |
CNES |
| SINAN | Anual e nacional | 58 famílias oficiais SINAN-*
|
process_sinan() para as 58 famílias |
SINAN |
Use datasus_information_systems() para consultar todos os 93 valores aceitos em information_system, seus nomes, periodicidade, abrangência, siglas usadas nos arquivos DBC e aliases.
A lista completa dos identificadores está na referência de fetch_datasus().
Controle do download
Algumas opções úteis de fetch_datasus():
-
varslimita as colunas retornadas. Sem processamento ou filtro de linhas, também evita alocar as demais colunas durante a leitura do DBC. -
track_source = TRUEacrescenta o nome do DBC de origem de cada registro. -
timeoutcontrola o limite de cada operação de rede, sem alterar opções globais do R. - o nome do arquivo, o progresso da transferência, a leitura e o resumo final são exibidos; use
quiet = TRUEpara ocultar o progresso e todas as mensagens de status. Avisos e erros continuam visíveis. -
stop_on_error = FALSEpreserva sucessos parciais e informa as falhas com avisos;TRUEinterrompe a solicitação em falhas de listagem, download, leitura ou processamento. -
ufaceita uma UF, várias UFs ou"all". Arquivos nacionais, como os do SINAN, ignoram esse argumento com um alerta.
Consulte o artigo Download e rastreabilidade para exemplos de todas essas opções.
Falhas de conexão e uso sem internet
Ter internet não garante acesso ao FTP do DataSUS. O servidor pode estar indisponível ou bloquear determinada rede. No modo padrão (collect = TRUE, stop_on_error = FALSE), fetch_datasus() retorna os registros aproveitados ou NULL quando não há registros a retornar. Verifique esse resultado antes de chamar process_*(), como nos exemplos acima. Avisos de falha também podem acompanhar um resultado parcial.
O cache reaproveita arquivos, mas fetch_datasus() ainda consulta a listagem remota. Para trabalhar sem conexão, use read_dbc() em DBCs locais ou readRDS() nos resultados já salvos. Processadores e consultas de dicionários podem exigir downloads se os arquivos necessários ainda não estiverem em um cache válido. As tabelas incluídas no pacote, como tabMun, são locais. Consulte as perguntas frequentes para os detalhes desses comportamentos.
Dicionários, cache e tabelas grandes
Um diretório explícito reutiliza DBC e ZIP do TabWin entre sessões. Configure também a opção do pacote para que chamadas diretas a process_*() usem esse mesmo cache:
cache <- datasus_cache_dir(create = TRUE)
options(microdatasus.cache_dir = cache)
variables <- datasus_variables("SIM-DO", cache_dir = cache)
schema <- datasus_schema("SIM-DO", cache_dir = cache)
contract <- validate_datasus_schema(sim_do_sample, "SIM-DO", period = 2020, cache_dir = cache)
audit <- audit_datasus_dictionaries(c("SIM-DO", "SINASC"), cache_dir = cache)
datasus_cache_info(cache)Os processadores aceitam labels = "factor", "character" ou "none". Com diagnostics = TRUE, processing_diagnostics() informa códigos ausentes das conversões, campos esperados ou não mapeados, falhas de coerção e a proveniência — fonte, definição e checksum — de cada dicionário usado.
As otimizações de processamento são automáticas: datas repetidas são convertidas uma vez por campo e formato; o desescape só é aplicado a textos com barras invertidas; preenchimentos de códigos e faixas CNV F são vetorizados; e a seleção de relações históricas acessa as colunas necessárias. A conversão textual para UTF-8 permanece ativa, preservando identificadores marcados como "bytes" na etapa de normalização.
Use labels = "none" se precisar dos códigos, municipality_data = FALSE se não precisar dos atributos territoriais e diagnostics = FALSE (padrão) se não precisar do relatório. labels = "none" não garante execução sem rede: SIA, CNES e SINAN ainda consultam os dicionários para determinar a semântica dos campos. Uma primeira chamada pode incluir download e análise desses arquivos; chamadas seguintes podem reutilizar o cache.
Para solicitações grandes, combine destination, collect = FALSE e process = TRUE: cada DBC é processado e gravado antes da leitura do próximo. O retorno é um manifesto com caminhos, número de linhas, origem e checksum.
Use row_filter para descartar linhas de cada DBC antes do processamento e reduzir memória e tempo. Novos manifests usam SHA-256; espelhos HTTP/FTP podem ser informados por options(microdatasus.mirrors = c("https://...")). Com process = TRUE ou row_filter, a leitura usa o layout completo, e vars é aplicado depois dessas etapas. Isso preserva os campos necessários para datas históricas, idades e relações entre colunas.
Com provenance = TRUE, datasus_lockfile(dados, "datasus.lock.rds") registra a consulta e os DBC. Acrescente process = TRUE e process_args = list(diagnostics = TRUE) para registrar também os dicionários e as tabelas de referência usados no processamento.
O enriquecimento municipal usa uma referência fixa, identificada por datasus_reference_tables() como datasus-territorio-2023-txt-20220516. Ela foi reconstruída sem alterar os valores de tabMun, usando os TXT oficiais congelados no pacote. Não representa automaticamente os limites territoriais vigentes no ano de cada registro. Use municipality_data = FALSE para aplicar outra referência; consulte tabMun para a origem e as transformações de compatibilidade.
O guia Dicionários, cache e processamento em escala apresenta o fluxo completo e um exemplo para medir o processamento dos seus dados. A documentação dos benchmarks explica o escopo dos testes de desempenho do repositório. O artigo Formatos DBC, DEF e CNV descreve as regras de leitura, precedência e diagnóstico. O suporte do SIM nesta versão é restrito a CID-10.
Arquivos DBC locais
Use read_dbc() quando o arquivo já estiver no computador:
dados <- read_dbc("arquivo.dbc")
# Preserva os tipos inferidos dos metadados DBF
dados_tipados <- read_dbc("arquivo.dbc", as_character = FALSE)
# Lê somente as colunas necessárias, sem alocar as demais
dados_selecionados <- read_dbc(
"arquivo.dbc",
vars = c("CODMUNRES", "DTOBITO")
)
# Para arquivos cujo marcador de code page esteja ausente ou incorreto
dados_latin1 <- read_dbc("arquivo.dbc", encoding = "latin1")
# Alguns arquivos históricos usam a página de código DOS CP850
dados_cp850 <- read_dbc("arquivo_historico.dbc", encoding = "CP850")read_dbc() descomprime e interpreta os registros diretamente, sem criar um DBF intermediário. O fluxo completo, o layout DBF, os marcadores de registro e o CRC32 são validados mesmo quando vars seleciona poucas colunas.
encoding = "auto" combina o marcador DBF com evidência de bytes por coluna e por linha. Texto reconhecido é convertido para UTF-8; misturas ambíguas e alguns identificadores ofuscados são preservados sem perda como strings com codificação "bytes", acompanhadas de aviso. Um encoding explícito é estrito e interrompe a leitura diante de bytes inválidos. Isso inclui, em qualquer sistema operacional, os cinco valores indefinidos do Windows-1252 (81, 8D, 8F, 90 e 9D em hexadecimal).
Como citar
Ao utilizar o pacote, cite:
SALDANHA, Raphael de Freitas; BASTOS, Ronaldo Rocha; BARCELLOS, Christovam. Microdatasus: pacote para download e pré-processamento de microdados do Departamento de Informática do SUS (DATASUS). Cadernos de Saúde Pública, v. 35, n. 9, e00032419, 2019. https://doi.org/10.1590/0102-311x00032419.
Quando o livro apoiar a descrição ou a interpretação dos sistemas, cite também:
SALDANHA, Raphael de Freitas. Sistemas de Informação em Saúde no Brasil. Rio de Janeiro: Edição do autor, 2026. ISBN 978-65-01-37841-1. https://rfsaldanha.github.io/sis/.
Agradecimentos
O suporte a DBC foi construído a partir de contribuições de código aberto dos projetos read.dbc, de Daniela Petruzalek, e healthbR, de Sidney Bissoli.
Dúvidas e sugestões
Crie uma issue ou envie um e-mail para raphael.saldanha@fiocruz.br.