如何在R中从SAS打开文本(.txt)文件?

3ks5zfa0  于 2023-06-27  发布在  其他
关注(0)|答案(1)|浏览(205)

我有一个文本(. txt)文件,显然是在SAS上创建的。我不知道SAS是如何工作的,但我需要在R中打开文本文件,这样它就可以作为一个带有变量名称和所有内容的 Dataframe 读取。
该文件可以在这里下载:https://www.ibge.gov.br/estatisticas/downloads-estatisticas.html?caminho=pense/2009/microdados/。这是一个名为“PENSE_2009_microdados.zip”的压缩文件。有3个文件夹:

  1. Dados-带有“Base_Pense Completa_2009.txt”
  2. Documentação-使用数据字典
    1.输入SAS-带有我无法理解的. csv文件
    1.一个"read me"文件,说明"Dados"文件夹包含数据,"Documentação"文件夹包含"SAS的布局和阅读输入"。
    有人知道如何将这些数据“转换”成有意义的 Dataframe 吗?先谢谢你了。
n7taea2i

n7taea2i1#

它是一个固定宽度的文件,每行包含文档中的所有变量,没有空格,您可以提供组成每列的字符数。
输入sas文件(应该是.sas,不知道为什么是excel格式)告诉你变量名和它们的格式/宽度。
您也可以从文档excel文件中获得此信息,以及因子变量的格式,例如,B01P02有5个编码为1到5的唯一值。

doc <- readxl::read_excel('PENSE_2009_microdados/Documenta‡ֶo/Dicionario_Base Pense_Completa.xls')
## the widths for each column
wid <- doc$TÉRMINO - doc$INICIO + 1

dat <- read.fwf(
  'PENSE_2009_microdados/Dados/Base_Pense Completa_2009.txt',
  ## also add variable names
  widths = wid, col.names = doc$CAMPO,
  # n = 1000,
  ## some options for importing NAs/trimming white space
  na.strings = c('NA', '.', ''), strip.white = TRUE
)

## add labels if wanted
dat <- Hmisc::upData(dat, labels = setNames(doc$DESCRICAO, doc$CAMPO))

str(dat)

下面是如何使用格式。它们不是标准化的,因此并非所有都将以这种方式固定:

x <- doc$DOMÍNIO[doc$CAMPO %in% 'B01P02']
# [1] "1- Branca\n 2- Preta(Negra)\n 3- Parda(Mulata) \n 4- Amarela(Oriental) \n 5- Indígena"

fmt <- read.table(text = x, sep = '-', strip.white = TRUE)
x_fmt <- factor(dat$B01P02, fmt$V1, fmt$V2)

table(old = dat$B01P02, new = x_fmt)
#    new
# old Branca Preta(Negra) Parda(Mulata) Amarela(Oriental) Indígena
#   1    309            0             0                 0        0
#   2      0          167             0                 0        0
#   3      0            0           436                 0        0
#   4      0            0             0                27        0
#   5      0            0             0                 0       30

相关问题