O período e a UF do download são necessariamente os do evento?
Não. Os argumentos de fetch_datasus() selecionam as
partições em que o DataSUS publicou os registros. A pergunta analítica
pode exigir outra dimensão, como município de residência, município de
ocorrência, competência, data da notificação ou data de
encerramento.
Escolha e filtre as variáveis do próprio registro depois do download. Em uma análise de óbitos ocorridos em 2020, por exemplo:
library(microdatasus)
sim_raw <- fetch_datasus(
year_start = 2019,
year_end = 2021,
uf = "AC",
information_system = "SIM-DO"
)
sim <- process_sim(sim_raw)
sim$DTOBITO <- as.Date(sim$DTOBITO)
sim_2020 <- sim[format(sim$DTOBITO, "%Y") == "2020", ]Os capítulos do livro sobre SIM, SINASC, SIH, SIA, SINAN e CNES explicam quais dimensões temporais e territoriais existem em cada sistema.
Quando devo informar os meses?
SIH, SIA e CNES são mensais e exigem month_start e
month_end. SIM, SINASC e SINAN são anuais; meses informados
para esses sistemas são ignorados com uma mensagem.
Um único mês ainda precisa aparecer nos dois argumentos:
dados <- fetch_datasus(
year_start = 2023,
month_start = 4,
year_end = 2023,
month_end = 4,
uf = "PE",
information_system = "SIH-RD"
)Como aumentar o timeout?
Use timeout em fetch_datasus(),
fetch_cadger() ou fetch_sigtab(). A função
aplica o valor diretamente a cada operação de rede e não altera
options(timeout):
dados <- fetch_datasus(
year_start = 2023,
month_start = 1,
year_end = 2023,
month_end = 1,
uf = "SP",
information_system = "SIA-PA",
timeout = 600
)Falhas transitórias recebem até duas novas tentativas. Aumentar o timeout ajuda com arquivos grandes ou conexões lentas, mas não corrige um arquivo ausente ou inválido.
O que acontece quando apenas parte do download falha?
Com stop_on_error = FALSE, que é o padrão, os arquivos
válidos são retornados e as falhas são resumidas ao final. Se nenhum
arquivo for lido, o retorno é NULL.
dados <- fetch_datasus(
year_start = 2023,
month_start = 1,
year_end = 2023,
month_end = 12,
uf = c("AC", "RO"),
information_system = "SIH-RD",
stop_on_error = FALSE
)
if (is.null(dados)) {
message("Nenhum arquivo foi obtido.")
}Com stop_on_error = TRUE, uma falha de listagem,
download ou leitura interrompe a chamada.
Como saber de qual arquivo veio cada linha?
Use track_source = TRUE:
dados <- fetch_datasus(
year_start = 2023,
month_start = 1,
year_end = 2023,
month_end = 2,
uf = c("AC", "RO"),
information_system = "SIH-RD",
track_source = TRUE
)
unique(dados$source)Essa coluna é preservada quando vars é usado. A função
não sobrescreve uma coluna source já existente no DBC.
Como reduzir o uso de memória?
Comece selecionando apenas as colunas necessárias:
dados <- fetch_datasus(
year_start = 2022,
year_end = 2022,
uf = "MG",
information_system = "SIM-DO",
vars = c("DTOBITO", "CODMUNRES", "CAUSABAS", "IDADE", "SEXO")
)Para muitos anos, meses ou UFs, baixe lotes menores e grave cada lote em um banco de dados. O exemplo abaixo usa SQLite:
library(DBI)
library(RSQLite)
con <- dbConnect(SQLite(), "sih.sqlite")
grade <- expand.grid(
ano = 2022:2023,
mes = 1:12,
uf = c("AC", "RO"),
stringsAsFactors = FALSE
)
for (i in seq_len(nrow(grade))) {
lote <- fetch_datasus(
year_start = grade$ano[i],
month_start = grade$mes[i],
year_end = grade$ano[i],
month_end = grade$mes[i],
uf = grade$uf[i],
information_system = "SIH-RD",
vars = c("MUNIC_RES", "DT_INTER", "DIAG_PRINC", "SEXO"),
track_source = TRUE,
timeout = 600,
stop_on_error = FALSE
)
if (is.null(lote)) {
next
}
lote <- process_sih(lote)
dbWriteTable(
con,
"sih",
lote,
append = dbExistsTable(con, "sih")
)
}
dbDisconnect(con)Consulte depois sem carregar toda a tabela:
Por que as colunas processadas são texto?
As funções process_*() recodificam valores conhecidos e
normalizam sequências Unicode em todas as colunas. Essa etapa final
retorna um tibble de colunas character.
Converta somente o que a análise exige:
sim <- process_sim(sim_raw)
sim$DTOBITO <- as.Date(sim$DTOBITO)
sim$IDADEanos <- as.integer(sim$IDADEanos)Faça a conversão depois de inspecionar códigos especiais, ausências e mudanças de layout. O livro de SIS apresenta checklists e seções de estrutura dos dados para cada sistema.
Posso baixar várias UFs de uma vez?
Sim:
dados <- fetch_datasus(
year_start = 2023,
month_start = 1,
year_end = 2023,
month_end = 1,
uf = c("AC", "RO", "AM"),
information_system = "CNES-ST"
)Use uf = "all" para todas as UFs. Não combine
"all" com códigos individuais. Nos sistemas nacionais, como
SINAN, uf é ignorado com um alerta; filtre a variável
territorial do registro depois do download.
O apêndice de códigos de municípios discute códigos IBGE, códigos usados nos SIS e mudanças territoriais.
Como são escolhidos dados atuais, históricos e preliminares?
A escolha é automática para cada período, UF e fragmento. Dados definitivos ou atuais têm prioridade sobre preliminares; cópias atuais têm prioridade sobre diretórios históricos. A função informa quando usa publicações preliminares ou históricas.
Essas versões podem diferir em cobertura, crítica e layout. Para séries temporais, consulte a linha do tempo e os cuidados de interpretação do capítulo correspondente no livro de SIS.
Posso ler um arquivo DBC que já tenho?
Sim:
dados <- read_dbc("arquivo.dbc")Por padrão, todas as colunas são texto. Para manter os tipos inferidos do DBF:
dados <- read_dbc("arquivo.dbc", as_character = FALSE)O DBF intermediário é temporário e removido automaticamente.
Por que o DataSUS não está acessível?
O download depende de acesso FTP ao servidor do DataSUS. Indisponibilidade temporária, bloqueios de rede corporativa e restrições geográficas podem impedir a conexão. Verifique o diagnóstico consolidado da função, tente outro momento ou outra rede e evite múltiplas chamadas paralelas.