【问题标题】:Converting R file to Stata with missing string values将 R 文件转换为缺少字符串值的 Stata
【发布时间】:2014-12-19 21:20:52
【问题描述】:

将 R 文件转换为 Stata 格式时出现错误。我能够将数字转换为 Stata 文件,但是当我包含字符串时,出现以下错误:

library(foreign)
write.dta(newdata, "X.dta")

Error in write.dta(newdata, "X.dta") : 
  empty string is not valid in Stata's documented format

我有几个字符串,如位置、名称等,其中缺少可能导致此问题的值。有没有办法处理这个? .

【问题讨论】:

  • 您可以发布生成该错误的示例输入数据吗?
  • 明确一点,如果“空字符串”被解释为"",那么Stata确实允许它。实际上,它对应于缺少对字符串变量的观察。

标签: r stata


【解决方案1】:

我之前多次遇到过这个错误,很容易重现:

library(foreign)
test <- data.frame(a = "", b = 1, stringsAsFactors = FALSE)
write.dta(test, 'example.dta')

一种解决方案是使用因子变量而不是字符变量,例如,

for (colname in names(test)) {
  if (is.character(test[[colname]])) {
    test[[colname]] <- as.factor(test[[colname]])
  }
}

另一个是将空字符串更改为其他内容并在Stata中将它们更改回。

这纯粹是write.dta 的问题,因为Stata 完全可以处理空字符串。但由于foreign 已冻结,您对此无能为力。

更新:(2015-12-04)更好的解决方案是在haven 包中使用write_dta

library(haven)
test <- data.frame(a = "", b = 1, stringsAsFactors = FALSE)
write_dta(test, 'example.dta')

这样,Stata 将字符串变量正确读取为字符串。

【讨论】:

    【解决方案2】:

    您可以使用出色的 readstata13 包(请仅导入 Rcpp 包)。

    readstata13::save.dta13(mtcars, 'mtcars.dta')
    

    该功能允许以 Stata 15/16 MP 文件格式保存(实验性),这是 Stata 13 格式之后的下一次更新。

    readstata13::save.dta13(mtcars, 'mtcars15.dta', version="15mp")
    

    注意:当然,这也适用于 OP 的数据:

    readstata13::save.dta13(data.frame(a="", b=1), 'my_data.dta')
    

    【讨论】:

      猜你喜欢
      • 2018-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-17
      • 1970-01-01
      • 2014-05-19
      • 1970-01-01
      相关资源
      最近更新 更多