【问题标题】:Read Stata 13 file in R在 R 中读取 Stata 13 文件
【发布时间】:2014-07-16 22:22:34
【问题描述】:

有没有办法在 R 中读取 Stata 13 版数据集文件?

我已尝试执行以下操作:

> library(foreign)
> data = read.dta("TEAdataSTATA.dta") 

但是,我得到了一个错误:

read.dta("TEAdataSTATA.dta") 中的错误:
不是Stata 5-12 .dta 文件

有人能指出是否有办法解决这个问题吗?

【问题讨论】:

  • 不在foreign 包中。 ?read.dta: "Frozen: 12 之后将不支持 Stata 格式"。
  • @BenBolker 谢谢 Ben,有没有什么东西可以处理 Stata 13 文件(顺便说一下,我认为你的父亲是 Ben Bolker,他很久以前就教过我数学 :),对不起,如果这很奇怪)
  • 你的意思是 Ethan Bolker,对吧?不知道,抱歉——可能有人不得不坐下来对格式进行逆向工程。 stata.com/statalist/archive/2013-10/msg00701.html cmets 现在也很难转移到 SPSS。

标签: r stata


【解决方案1】:

如果您有 Stata 13,则可以使用命令saveold 将其加载并保存为 Stata 12 格式(请参阅help saveold)。之后,把它带到R。

如果你有,Stata 10 - 12,你可以使用用户编写的命令use13,(由 Sergiy Radyakin)加载并保存在那里;然后到 R。你可以安装 use13 运行 ssc install use13

详情请见http://radyakin.org/transfer/use13/use13.htm

仍然使用 Stata 的其他替代方案涉及将 Stata 格式导出到 R 将读取的其他内容,例如基于文本的文件。请参阅 Stata 中的 help export

更新

从 Stata 14 开始,saveold 有一个 version() 选项,允许以与 Stata 11 一样旧的 Stata .dta 格式保存。

【讨论】:

  • 好的,谢谢一百万。但是很抱歉我还有一个问题,当我尝试写入将数据转换为spss文件时,我输入:假设我已经将数据从STATA文件导入到一个名为data1的数据帧中,那么我写入数据帧使用write.table(data , 'mydata.txt' , sep="\t") 到一个文本文件,然后得到我做的SPSS 文件:write.foreign(b , "mydata.txt" , "DerLeew.sps" , package="SPSS") 但我得到错误:Error in writeForeignSPSS(df = list(studyid = c("P0008", "P0018", "P0031", : I cannot abbreviate the variable names to eight or fewer letters,谢谢。
  • 我说不出为什么。我对 R 的了解比较有限。我确实想知道所有这些转换发生了什么:Stata 到 R 到 txt 到 SPSS。如果您想将 Stata 转换为 SPSS,请尝试使用 Stata 命令 savespss,再次由 Sergiy Radyakin 编写。阅读以下内容以开始使用:radyakin.org/transfer/savespss/savespss.htm.
  • 我不是必须使用 Stat/Transfer 直接在 STATA 中完成吗?
  • 一点也不。 Sergiy 在数据传输问题上做了很大的努力。您需要做的就是使用net from http://radyakin.org/transfer/savespss/beta 安装该命令并阅读我之前评论中的网页以了解(非常简单的)语法。 (顺便说一句,拼写是Stata,不是STATA。不是首字母缩写词。)
【解决方案2】:

有一个新包可以将 Stata 13 文件导入 R 中的 data.frame。

安装包并使用 read.dta13() 读取 Stata 13 数据集:

install.packages("readstata13")

library(readstata13)
dat <- read.dta13("TEAdataSTATA.dta")

更新:0.8 版中的 readstata13 导入还包含从 Stata 6 到 14 的文件

更多关于包的信息:https://github.com/sjewo/readstata13

【讨论】:

  • 我在尝试执行devtools::install_github("sjewo/readstata13", ref="0.2") 行时收到Error in loadNamespace(name) : there is no package called ‘httr’
  • 嗨,丹!您的 devtools 可能已过时,并且缺少 httr 包。尝试更新您的软件包 install.packages("devtools", dependencies=T) 并检查您是否可以使用 library(devtools) 加载开发工具。也许您也可以使用 library(httr) 来检查 httr。
  • 你的包对数据集中的任何strL变量做了什么?
  • strL 变量继承了对attr(NameOfDataset, "strl") 获得的列表中的字符串的引用。
  • 在 0.4 版中,可以设置选项 replace.strl=TRUE 以将 data.frame 中对 strL 字符串的引用替换为实际值。
【解决方案3】:

同时 savespss 命令成为 SSC 存档的成员,可以通过以下方式安装到 Stata:findit savespss

主页http://www.radyakin.org/transfer/savespss/savespss.htm 继续工作,但程序现在应该从 SSC 安装,不是从 beta 位置安装。

【讨论】:

    【解决方案4】:

    有一个名为 Haven 的新软件包,由 Hadley Wickham 开发,可以加载 Stata 13 dta 文件(以及 SAS 和 SPSS 文件)

    library(haven) # haven package now available on cran
    df <- read_dta('c:/somefile.dta')
    

    见:https://github.com/hadley/haven

    【讨论】:

    • 请注意,haven 在格式方面似乎不如readstata13 准确,将许多数字变量标记为字符变量。所以对于那些使用haven的人来说,这可能是需要考虑的事情。
    • +1 因为 haven 也是我发现的最适合从 SAS 导入其他专有格式(如 .sas7bdat)的方法,请参阅 here,而 readstata13 显然是单一用途的包。
    • 仅供参考,haven 现在可在 CRAN 上使用。无需从 github 安装。
    【解决方案5】:

    我遇到了同样的问题。试过read.dta13read.dta,但没有任何效果。然后尝试了最简单和最意想不到的:MS Excel!它神奇地打开了。我将它保存为 .csv 并在 R 中使用!!!希望这会有所帮助!!!!

    【讨论】:

      【解决方案6】:

      我不熟悉 R 程序在能力方面的现状 读取其他文件格式,但如果某人的计算机上没有安装 Stata,并且 R 无法读取特定版本的 Stata 的 dta 文件,那么 Python 中的 Pandas 现在可以进行绝大多数此类转换。

      基本上,来自dta 文件的数据首先使用pandas.read_stata 函数加载。从0.23.0 版本开始,支持的编码和格式可以在related answer of mine 中找到。

      然后可以将数据保存为csv 文件并导入它们 使用标准 R 函数,或者改用 pandas.DataFrame.to_feather 函数,该函数使用基于 Apache Arrow 构建的序列化格式导出数据。后者在 R 中有广泛的支持,因为它被设想为 promote interoperabilityPandas

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-01
        • 1970-01-01
        • 2011-08-03
        • 1970-01-01
        • 1970-01-01
        • 2013-08-27
        • 1970-01-01
        相关资源
        最近更新 更多