Skip to contents

Em arquivos de dados

É possível classificar as CSAP diretamente a partir de arquivos com extensão .DBC, .DBF, ou .CSV, sem necessidade da leitura prévia dos dados. Para outras extensões de arquivo é necessária a prévia importação dos dados para um objeto de classe data.frame.

Arquivos do DATASUS

Através de seu site FTP, o DATASUS disponibiliza dados de diferentes Sistemas de Informação em Saúde do SUS, em arquivos comprimidos de extensão DBC. Os arquivos podem ser baixados na página de transferência de arquivos do DATASUS e expandidos para DBF ou CSV (entre várias outras possibilidades de manejo) pelo TabWin, disponível na mesma página. Graças ao pacote read.dbc, de Daniela Petruzalek, também podemos ler os arquivos comprimidos do DATASUS no R, e graças ao pacote microdatasus, de Raphael Saldanha [@Saldanha2019], podemos ler com facilidade esses arquivos na internet, sem necessidade de download.

O código abaixo cria um banco com as informações das AIHs do “ano de competência” 2021 ocorridas no RS e outro com as informações das Declarações de Óbito (DO) de residentes no RS ocorridas em 2021:

# remotes::install_github("rfsaldanha/microdatasus") # desnecessário se o pacote estiver instalado
AIHRS2021 <- microdatasus::fetch_datasus(year_start = 2021, 1, 2021, 12, uf = "RS", information_system = "SIH-RD")
nrow(AIHRS2021) # linhas
[1] 709893
ncol(AIHRS2021) # colunas
[1] 113

DORS2021 <- microdatasus::fetch_datasus(year_start = 2021, year_end = 2021, uf = "RS", information_system = "SIM-DO")
nrow(DORS2021)
[1] 117722
ncol(DORS2021)
[1] 87

Se o arquivo de dados estiver armazenado no computador, basta digitar, entre aspas, o nome do arquivo — com o “path” se o arquivo estiver em diretório diferente daquele da sessão de trabalho ativa (neste exemplo, num sub-diretório do diretório de trabalho da sessão ativa, chamado ‘data-raw’).

csap.dbc <- csapAIH("../../data-raw/RDRS1801.dbc")
Importados 60.529 registros.
Excluídos 8.240 (13,6%) registros de procedimentos obstétricos.
Excluídos 366 (0,6%) registros de AIH de longa permanência.
Exportados 51.923 (85,8%) registros.
csap.dbf <- csapAIH("../../data-raw/RDRS1801.dbf")
Importados 60.529 registros.
Excluídos 8.240 (13,6%) registros de procedimentos obstétricos.
Excluídos 366 (0,6%) registros de AIH de longa permanência.
Exportados 51.923 (85,8%) registros.
  • No caso de arquivos CSV é mandatório indicar o tipo de separador de campos, com o argumento sep.
csap.csv <- csapAIH("../../data-raw/RDRS1801.csv", sep = ",")
Importados 60.529 registros.
Excluídos 8.240 (13,6%) registros de procedimentos obstétricos.
Excluídos 366 (0,6%) registros de AIH de longa permanência.
Exportados 51.923 (85,8%) registros.

A função fetchcsap foi pensada para apresentar um extrato dos registros por período de internação e não de “competência” da AIH, que é commo se organizam os arquivos de dados. Assim, precisamos modificar alguns argumentos para ter os mesmos registros:

csap.ftp <- fetchcsap('RS', 2018, mesfim = 1, anofim = 2018, periodo = "competencia")

[36mℹ
[39m Your local Internet connection seems to be ok.

[36mℹ
[39m DataSUS FTP server seems to be up and reachable.

[36mℹ
[39m Starting download...
Importados 60.529 registros.
Excluídos 8.240 (13,6%) registros de procedimentos obstétricos.
Excluídos 366 (0,6%) registros de AIH de longa permanência.
Exportados 51.923 (85,8%) registros.

Os extratos são iguais:

all.equal(attributes(csap.dbc)$resumo, attributes(csap.dbf)$resumo)
[1] TRUE
all.equal(attributes(csap.dbc)$resumo, attributes(csap.csv)$resumo)
[1] TRUE
all.equal(attributes(csap.ftp)$resumo, attributes(csap.dbc)$resumo)
[1] TRUE

Mas em estudos epidemiológicos geralmente nos interessa delimitar a população pela data de internação, o que exige trabalho posterior à leitura do arquivo “RD”, pois o arquivo de um determinado mês e ano de “competência” pode conter registros de internações ocorridas em outro momento. Vemos abaixo que a data de internação nos objetos criados anteriormente (a partir de “RDRS1801.dbc”) varia de 01Aug2017 a 31Oct2017. Além disso, o arquivo pode não conter o registro de todas as internações ocorridas naquele mês.

Por isso fetchcsap tem seus argumentos de forma a devolver o banco de dados apenas com os registros do período de interesse. Veja a seguir o resultado com as internações não-obstétricas para jan2018 segundo a seleção dos registros:
a. todos daquele mês de competência (mesmo comando anterior para a construção de csap.ftp”); b. apenas as internações ocorridas no mesmo mês de competência da AIH; e c. apenas as internações ocorridas em jan2018 e registradas nos arquivos “RD” dos meses de competência janeiro a fevereiro de 20018.

a <- fetchcsap('RS', 2018, mesfim = 1, anofim = 2018, periodo = "c")

[36mℹ
[39m Your local Internet connection seems to be ok.

[36mℹ
[39m DataSUS FTP server seems to be up and reachable.

[36mℹ
[39m Starting download...
Importados 60.529 registros.
Excluídos 8.240 (13,6%) registros de procedimentos obstétricos.
Excluídos 366 (0,6%) registros de AIH de longa permanência.
Exportados 51.923 (85,8%) registros.
nrow(a)
[1] 51923
summary(a$data.inter)
        Min.      1st Qu.       Median         Mean      3rd Qu.         Max. 
"2017-06-06" "2017-12-08" "2017-12-28" "2017-12-20" "2018-01-10" "2018-01-31" 
b <- fetchcsap('RS', 2018, mesfim = 1, anofim = 2018)

[36mℹ
[39m Your local Internet connection seems to be ok.

[36mℹ
[39m DataSUS FTP server seems to be up and reachable.

[36mℹ
[39m Starting download...
Importados 29.086 registros.
Excluídos 5.005 (17,2%) registros de procedimentos obstétricos.
Excluídos NA (NA%) registros de AIH de longa permanência.
Exportados 24.081 (82,8%) registros.
nrow(b)
[1] 24081
summary(b$data.inter)
        Min.      1st Qu.       Median         Mean      3rd Qu.         Max. 
"2018-01-01" "2018-01-05" "2018-01-11" "2018-01-12" "2018-01-18" "2018-01-31" 
c <- fetchcsap('RS', 2018, mesfim = 2, anofim = 2018)

[36mℹ
[39m Your local Internet connection seems to be ok.

[36mℹ
[39m DataSUS FTP server seems to be up and reachable.

[36mℹ
[39m Starting download...
Importados 75.818 registros.
Excluídos 12.363 (16,3%) registros de procedimentos obstétricos.
Excluídos 164 (0,2%) registros de AIH de longa permanência.
Exportados 63.291 (83,5%) registros.
nrow(c)
[1] 63291
summary(c$data.inter)
        Min.      1st Qu.       Median         Mean      3rd Qu.         Max. 
"2018-01-01" "2018-01-11" "2018-01-23" "2018-01-24" "2018-02-05" "2018-02-28" 
# Limpar o ambiente de trabalho, renomear um dos bancos de dados:
csap <- csap.ftp
rm(csap.csv, csap.dbc, csap.dbf, csap.ftp)

Em um banco de dados existente na sessão de trabalho

Com a estrutura dos arquivos da AIH

read.csv("../../data-raw/RDRS1801.csv") |> # criar o data.frame
  csapAIH() |>
  glimpse()
Importados 60.529 registros.
Excluídos 5.044 (8,3%) registros de procedimentos obstétricos.
Excluídos 366 (0,6%) registros de AIH de longa permanência.
Exportados 55.119 (91,1%) registros.
Rows: 55,119
Columns: 16
$ n.aih      
[3m
[38;5;246m<chr>
[39m
[23m "4318100063695"
[38;5;246m, 
[39m"4318100349508"
[38;5;246m, 
[39m"4318100349563"
[38;5;246m, 
[39m"4318100…
$ munres     
[3m
[38;5;246m<int>
[39m
[23m 431340
[38;5;246m, 
[39m430450
[38;5;246m, 
[39m430450
[38;5;246m, 
[39m430450
[38;5;246m, 
[39m430450
[38;5;246m, 
[39m430450
[38;5;246m, 
[39m430450
[38;5;246m, 
[39m430…
$ munint     
[3m
[38;5;246m<int>
[39m
[23m 431080
[38;5;246m, 
[39m430450
[38;5;246m, 
[39m430450
[38;5;246m, 
[39m430450
[38;5;246m, 
[39m430450
[38;5;246m, 
[39m430450
[38;5;246m, 
[39m430450
[38;5;246m, 
[39m430…
$ sexo       
[3m
[38;5;246m<fct>
[39m
[23m masc
[38;5;246m, 
[39mfem
[38;5;246m, 
[39mfem
[38;5;246m, 
[39mfem
[38;5;246m, 
[39mmasc
[38;5;246m, 
[39mmasc
[38;5;246m, 
[39mmasc
[38;5;246m, 
[39mmasc
[38;5;246m, 
[39mfem
[38;5;246m, 
[39mmasc
[38;5;246m, 
[39mfem…
$ nasc       
[3m
[38;5;246m<date>
[39m
[23m 55633-04-16
[38;5;246m, 
[39m56511-08-19
[38;5;246m, 
[39m56537-12-10
[38;5;246m, 
[39m56292-01-04
[38;5;246m, 
[39m55005-…
$ idade      
[3m
[38;5;246m<dbl>
[39m
[23m 58
[38;5;246m, 
[39m25
[38;5;246m, 
[39m24
[38;5;246m, 
[39m33
[38;5;246m, 
[39m80
[38;5;246m, 
[39m69
[38;5;246m, 
[39m50
[38;5;246m, 
[39m58
[38;5;246m, 
[39m70
[38;5;246m, 
[39m69
[38;5;246m, 
[39m88
[38;5;246m, 
[39m61
[38;5;246m, 
[39m26
[38;5;246m, 
[39m42
[38;5;246m, 
[39m67
[38;5;246m,
[39m…
$ fxetar.det 
[3m
[38;5;246m<fct>
[39m
[23m 55-59
[38;5;246m, 
[39m25-29
[38;5;246m, 
[39m20-24
[38;5;246m, 
[39m30-34
[38;5;246m, 
[39m80 e +
[38;5;246m, 
[39m65-69
[38;5;246m, 
[39m50-54
[38;5;246m, 
[39m55-59
[38;5;246m, 
[39m70…
$ fxetar5    
[3m
[38;5;246m<fct>
[39m
[23m 55-59
[38;5;246m, 
[39m25-29
[38;5;246m, 
[39m20-24
[38;5;246m, 
[39m30-34
[38;5;246m, 
[39m80 e +
[38;5;246m, 
[39m65-69
[38;5;246m, 
[39m50-54
[38;5;246m, 
[39m55-59
[38;5;246m, 
[39m70…
$ csap       
[3m
[38;5;246m<chr>
[39m
[23m "não"
[38;5;246m, 
[39m"não"
[38;5;246m, 
[39m"não"
[38;5;246m, 
[39m"não"
[38;5;246m, 
[39m"sim"
[38;5;246m, 
[39m"sim"
[38;5;246m, 
[39m"não"
[38;5;246m, 
[39m"não"
[38;5;246m, 
[39m"si…
$ grupo      
[3m
[38;5;246m<fct>
[39m
[23m no-CSAP
[38;5;246m, 
[39mno-CSAP
[38;5;246m, 
[39mno-CSAP
[38;5;246m, 
[39mno-CSAP
[38;5;246m, 
[39mg12
[38;5;246m, 
[39mg03
[38;5;246m, 
[39mno-CSAP
[38;5;246m, 
[39mno-C…
$ cid        
[3m
[38;5;246m<chr>
[39m
[23m "K439"
[38;5;246m, 
[39m"O628"
[38;5;246m, 
[39m"O641"
[38;5;246m, 
[39m"O623"
[38;5;246m, 
[39m"I64"
[38;5;246m, 
[39m"D500"
[38;5;246m, 
[39m"I408"
[38;5;246m, 
[39m"T63…
$ proc.rea   
[3m
[38;5;246m<int>
[39m
[23m 407040064
[38;5;246m, 
[39m411010034
[38;5;246m, 
[39m411010034
[38;5;246m, 
[39m303100044
[38;5;246m, 
[39m303040149
[38;5;246m, 
[39m3030…
$ data.inter 
[3m
[38;5;246m<date>
[39m
[23m 57221-04-11
[38;5;246m, 
[39m57221-03-29
[38;5;246m, 
[39m57221-04-08
[38;5;246m, 
[39m57221-04-08
[38;5;246m, 
[39m57221-…
$ data.saida 
[3m
[38;5;246m<date>
[39m
[23m 57221-04-13
[38;5;246m, 
[39m57221-03-31
[38;5;246m, 
[39m57221-04-10
[38;5;246m, 
[39m57221-04-09
[38;5;246m, 
[39m57221-…
$ cep        
[3m
[38;5;246m<int>
[39m
[23m 93544360
[38;5;246m, 
[39m96600000
[38;5;246m, 
[39m96600000
[38;5;246m, 
[39m96600000
[38;5;246m, 
[39m96600000
[38;5;246m, 
[39m96600000
[38;5;246m,
[39m…
$ cnes       
[3m
[38;5;246m<int>
[39m
[23m 2232189
[38;5;246m, 
[39m2232928
[38;5;246m, 
[39m2232928
[38;5;246m, 
[39m2232928
[38;5;246m, 
[39m2232928
[38;5;246m, 
[39m2232928
[38;5;246m, 
[39m22329…

Sem o padrão dos arquivos da AIH

Mude o argumento sihsus para FALSE e indique no argumento cid qual variável contém os códigos diagnósticos. As variáveis csap e grupo (se csapAIH(..., grupos = TRUE, ...)) são acrescentadas ao final do banco de dados alvo da função.

A Encuesta de Egresos Hospitalarios do Equador.
data("eeh20") # Amostra da "Encuesta de egresos hospitalarios" do Equador, ano 2020
names(eeh20) # Os nomes das variáveis
 [1] "prov_ubi"   "cant_ubi"   "parr_ubi"   "area_ubi"   "clase"     
 [6] "tipo"       "entidad"    "sector"     "mes_inv"    "nac_pac"   
[11] "cod_pais"   "nom_pais"   "sexo"       "cod_edad"   "edad"      
[16] "etnia"      "prov_res"   "area_res"   "anio_ingr"  "mes_ingr"  
[21] "dia_ingr"   "fecha_ingr" "anio_egr"   "mes_egr"    "dia_egr"   
[26] "fecha_egr"  "dia_estad"  "con_egrpa"  "esp_egrpa"  "cau_cie10" 
[31] "cant_res"   "parr_res"   "causa3"     "cap221rx"   "cau221rx"  
[36] "cau298rx"  

A variável cau_cie10 (posição 30) tem o código do diagnóstico de internação. A função csapAIH acrescenta à base duas (se grupo == TRUE) variáveis, csap e grupo, dispostas nas últimas colunas (posição e respectivamente.)

csap.eeh20 <- csapAIH(eeh20, sihsus = FALSE, cid = cau_cie10)
Importados 1.000 registros.
Excluídos 150 registros de parto (15% do total).
names(csap.eeh20)
 [1] "prov_ubi"   "cant_ubi"   "parr_ubi"   "area_ubi"   "clase"     
 [6] "tipo"       "entidad"    "sector"     "mes_inv"    "nac_pac"   
[11] "cod_pais"   "nom_pais"   "sexo"       "cod_edad"   "edad"      
[16] "etnia"      "prov_res"   "area_res"   "anio_ingr"  "mes_ingr"  
[21] "dia_ingr"   "fecha_ingr" "anio_egr"   "mes_egr"    "dia_egr"   
[26] "fecha_egr"  "dia_estad"  "con_egrpa"  "esp_egrpa"  "cau_cie10" 
[31] "cant_res"   "parr_res"   "causa3"     "cap221rx"   "cau221rx"  
[36] "cau298rx"   "csap"       "grupo"     
csap.eeh20[c(30,37:38)] |>
  head(3)
  cau_cie10 csap   grupo
1      C169  não no-CSAP
2      U072  não no-CSAP
3      A090  sim     g02
A Declaração de Óbito (DO) do SIM

A variável CAUSABAS tem o código da causa básica do óbito.

De modo semelhante à AIH, as bases de dados da DO também têm a idade codificada e não a verdadeira idade da pessoa. Por exemplo, a variável IDADE em DORS2021 é um factor com 0 níveis, em que o primeiro é e o último é . Neste caso podemos usar a função idadeSUS para computar a idade, mas como o resultado de idadeSUS é “um objeto da classe data frame com três variáveis” (v. ?idadeSUS), necessitamos a função unnest (de tidyr) para desagrupar as variáveis antes de inseri-las em DORS2021. Além disso, foi excluída (com unnest(...)[-2]) a “faixa etária detalhada”, que é a segunda variável no output de idadeSUS.

DORS2021 <- DORS2021 %>%
  csapAIH(sihsus = FALSE, cid = CAUSABAS, parto.rm = FALSE) %>%
  mutate(tidyr::unnest(idadeSUS(DORS2021, sis = "SIM"), cols = c())[-2],
         fxetar3 = fxetar3g(idade),
         SEXO = factor(SEXO, levels = c(1,2), labels = c("masc", "fem")))
Importados 117.722 registros.
DORS2021[1:3, (ncol(DORS2021)-5):ncol(DORS2021)]
  CONTADOR csap   grupo idade fxetar5 fxetar3
1        1  não no-CSAP    49   45-49   15-59
2        2  não no-CSAP    41   40-44   15-59
3        3  não no-CSAP    78   75-79    60e+

A partir de uma variável com códigos da CID-10:

cids <- aih100$DIAG_PRINC[1:10]
cids
 [1] N189 O689 S423 H938 P584 I200 I442 C189 C409 K818
3254 Levels: A009 A020 A044 A045 A048 A049 A050 A058 A059 A061 A069 A071 ... Z990
csapAIH(cids)
Excluídos 0 registros de parto (0% do total).
    cid csap   grupo
1  N189  não no-CSAP
2  O689  não no-CSAP
3  S423  não no-CSAP
4  H938  não no-CSAP
5  P584  não no-CSAP
6  I200  sim     g10
7  I442  não no-CSAP
8  C189  não no-CSAP
9  C409  não no-CSAP
10 K818  não no-CSAP