从版本14之前的Stata文件读取.dta文件到R中时,如何处理编码?

时间:2018-11-06 15:33:52

标签: r encoding stata

将Stata数据读取到R中时,如何避免编码问题?

我想读取的数据集是Stata 12或Stata 13中的.dta(在Stata在版本14中引入对utf-8的支持之前)。带有瑞典语和德语字母å,ä,ö,ß以及其他字符的文本变量不能很好地导入。

我尝试了read.dta中的these answersforeignhaven包(没有编码参数),现在尝试了read_stata13,这告诉了我expects Stata files to be encoded in CP1252。但是,a,编码不起作用。我应该放弃并使用.csv-export作为桥接,还是实际上可以在R中读取.dta文件?

最小示例:
这段代码下载了数据集的前几行,并举例说明了问题,例如在变量vocation中包含斯堪的纳维亚语言。

setwd("~/Downloads/")
system("curl -O http://www.lilljegren.com/stackoverflow/example.stata13.dta", intern=F)

library(foreign)
?read_dta
df1 <- read_dta('example.stata13.dta', encoding="latin1")
df2 <- read_dta('example.stata13.dta', encoding="CP1252")
library(readstata13)
df3 <- read.dta13('example.stata13.dta', fromEncoding="latin1")
df4 <- read.dta13('example.stata13.dta', fromEncoding="CP1252")
df5 <- read.dta13('example.stata13.dta', fromEncoding="utf-8")

vocation <- c("Brandkorpral","Sömmerska","Jungfru","Timmerman","Skomakare","Skräddare","Föreståndare","Platsförsäljare","Sömmerska")
df4$vocation == vocation
# [1]  TRUE FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE

1 个答案:

答案 0 :(得分:1)

在Mac上,Stata读取版本14之前生成的文件的正确编码为"macroman"

df <- read.dta13('example.stata13.dta', fromEncoding="macroman")

在我的Mac上,stata13和stata12格式的.dta文件(在Stata 13中由saveold保存)都很好地导入了。

假设read_stata13的手册在其他平台上正确地假定了"CP1252"。对我来说,"macroman"可以解决这个问题(也适用于Stata 13使用.csv生成的export delimited文件)。