无需Stata软件即可将dta文件转换为csv


72

有没有办法将dta文件转换为csv

我的计算机上没有安装Stata版本,因此无法执行以下操作:

File --> "Save as csv"

2
我敢肯定有办法。如果指定了.DTA文件的格式,则它可以成为简单的编程练习
Eli Bendersky 2010年

1
它是二进制文件,我不确定如何将其删除
Brian

Answers:


86

坦率地说,难以置信的Python数据分析库Pandas具有一个读取Stata文件的功能。

安装后,Pandas您可以执行以下操作:

>>> import pandas as pd
>>> data = pd.io.stata.read_stata('my_stata_file.dta')
>>> data.to_csv('my_stata_file.csv')

惊人!


4
哇,我
简直

这肯定对我有用。非常简单,可以从命令行完成,而且完全免费
古代极客,

56

您可以尝试通过R进行操作:

对于Stata <= 15,您可以使用避风港软件包读取数据集,然后将其简单地写入外部CSV文件:

library(haven)
yourData = read_dta("path/to/file")
write.csv(yourData, file = "yourStataFile.csv")

或者,在下面的评论中访问huntaub指向的链接


对于Stata <= 12数据集,也可以使用外部

library(foreign)
yourData <- read.dta("yourStataFile.dta")

1
请注意,如果您使用的是Stata 13.dta文件,则此技术无效。您应该在问题中使用技巧。
huntaub 2015年

@huntaub谢谢huntaub,更新后的答案是向下澄清12。
radek

1
完整入门者的注意事项:从library(haven)
Candamir

7

您可以在StatTransfer,R或perl中进行操作(正如其他人所提到的那样),但是StatTransfer的成本$$$和R / Perl具有学习曲线。
AM Statistics Software有一个免费的,由菜单驱动的统计程序,可以打开和转换所有Stata版本的Stata .dta,请参阅:

http://am.air.org/


4
顺便说一句,这是Stata对.dta文件的结构的细分,这对于提取数据元素可能有用: stata.com/help.cgi?dta
eric.a.booth 2010年

6

我没有尝试过,但是如果您知道Perl,则可以使用Parse-Stata-DtaReader模块为您转换文件。

该模块具有命令行工具dta2csv,可以“将Stata 8和Stata 10 .dta文件转换为csv”


5

使用R在几乎任何数据格式之间转换的另一种方法是rio软件包。

  • CRAN安装R并打开R
  • rio使用以下方法安装软件包install.packages("rio")
  • 加载rio库,然后使用以下convert()功能:

    library("rio")
    convert("my_file.dta", "my_file.csv")
    

此方法使您可以在多种格式之间进行转换(例如,Stata,SPSS,SAS,CSV等)。它使用文件扩展名来推断格式并使用适当的导入包加载。可以在R-project rio页面上找到更多信息。


我确信这对于已经使用R的人来说非常有用,但是对于那些不喜欢R的人(可能像我一样),这可能会令人沮丧。我花了一个多小时的Google搜索和反复试验才能弄清您必须安装的所有不同软件包,然后才能真正起作用。
肯尼·路易斯

3
@KennyLJ我是R的新手,发现这很容易。刚跑install.packages("rio"),很高兴去。
马修·维塔

4

R方法将可靠地工作,并且几乎不需要R知识。请注意,使用外部程序包进行的转换将保留数据,但可能会带来差异。例如,当转换没有主键的表时,在转换期间将插入主键和关联的列。

http://www.r-bloggers.com/using-r-for-stata-to-csv-conversion/我建议:

library(foreign)
write.table(read.dta(file.choose()), file=file.choose(), quote = FALSE, sep = ",")

2

StatTransfer是一个程序,可在Stata,Excel(或csv),SAS等之间轻松移动数据。它非常易于使用(不需要编程技能)。见www.stattransfer.com

如果使用该程序,请注意,您必须选择“ ASCII /文本分隔”才能使用.csv文件而不是.xls


1
这是付费的,但您可以下载以试用。
vsingh 2013年

2

在Python中,可以使用 statsmodels.iolib.foreign.genfromdta用来读取Stata数据集。此外,还有上述功能的包装,可用于直接从Web读取Stata文件statsmodels.datasets.webuse

尽管如此,以上两种情况都依赖于 pandas.io.stata.StataReader.data现在已成为遗留函数并且已弃用。因此,新的pandas.read_stata功能现在应该总是被用来代替

根据 源文件stata.py,为的版本0.23.0,下面的支持:

Stata数据文件版本:

  • 104
  • 105
  • 108
  • 111
  • 113
  • 114
  • 115
  • 117
  • 118

有效编码:

  • ASCII
  • 美国
  • 拉丁语1
  • latin_1
  • iso-8859-1
  • iso8859-1
  • 8859
  • cp819
  • 拉丁
  • 拉丁语1
  • L1

正如其他人指出的那样,该pandas.to_csv功能随后可用于将文件保存到磁盘。相关功能numpy.savetxt还可以将数据另存为文本文件。


编辑:

以下详细信息来自help dtaversionStata 15.1:

        Stata version     .dta file format
        ----------------------------------------
               1               102
            2, 3               103
               4               104
               5               105
               6               108
               7            110 and 111
            8, 9            112 and 113
          10, 11               114
              12               115
              13               117
              14 and 15        118 (# of variables <= 32,767)
              15               119 (# of variables > 32,767, Stata/MP only)
        ----------------------------------------
        file formats 103, 106, 107, 109, and 116
        were never used in any official release.

我随意添加有关dta版本的更多信息。
尼克·考克斯

谢谢。我很惊讶地发现这些细节被字面上地埋在了源代码中,所以我想将它们张贴在这里供其他人使用。

它们不是“字面上埋在源代码中”,而是公开记录。
尼克·考克斯

2

有人提到SPSS,StatTransfer,它们不是免费的。R和Python(也在上面提到)可能是您的选择。但是个人而言,我想推荐Python,其语法比R直观得多。您可以在Python中对Pandas使用几个命令行来读取和导出大多数常用的数据格式:

将熊猫作为pd导入

df = pd.read_stata('YourDataName.dta')

df.to_csv('YourDataName.csv')


0

SPSS还可以读取.dta文件并将其导出到.csv,但这需要花钱。PSPP是SPSS的开源版本,大致而言,它也可能能够读取/导出.dta文件。


-11

对于拥有Stata的人(即使询问者没有),您可以使用以下方法:

外表会产生制表符分隔的文件,因此您需要指定以下comma选项

outsheet [varlist] using file.csv , comma

另外,如果要删除标签(默认情况下包含

outsheet [varlist] using file.csv, comma nolabel

帽子提示:

http://www.ats.ucla.edu/stat/stata/faq/outsheet.htm

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.