不使用Stata软件将dta文件转换为csv
Posted
技术标签:
【中文标题】不使用Stata软件将dta文件转换为csv【英文标题】:Convert a dta file to csv without Stata software 【发布时间】:2011-02-01 22:10:48 【问题描述】:有没有办法将dta
文件转换为csv
?
我的计算机上没有安装 Stata 版本,因此无法执行以下操作:
File --> "Save as csv"
【问题讨论】:
我确信有办法。如果指定了.DTA文件的格式,就可以变成一个简单的编程练习 它是二进制文件,我不知道如何从那里取出它 【参考方案1】:我没试过,但是如果你知道 Perl,你可以使用 Parse-Stata-DtaReader 模块为你转换文件。
模块有一个命令行工具dta2csv,可以“将Stata 8和Stata 10的.dta文件转换为csv”
【讨论】:
【参考方案2】:你可以尝试通过 R 来做:
对于 Stata haven package 读取数据集,然后将其写入外部 CSV 文件:
library(haven)
yourData = read_dta("path/to/file")
write.csv(yourData, file = "yourStataFile.csv")
或者,在下面的评论中访问由huntaub指出的the link。
对于Stata foreign 包也可以使用
library(foreign)
yourData <- read.dta("yourStataFile.dta")
【讨论】:
请注意,如果您使用的是 Stata 13.dta
文件,则此技术不起作用。您应该利用this 问题中的技术。
@huntaub 感谢huntaub,更新了答案以澄清12向下。
初学者注意事项:以library(haven)
开头【参考方案3】:
StatTransfer 是一个可以在 Stata、Excel(或 csv)、SAS 等之间轻松移动数据的程序。它非常用户友好(不需要编程技能)。请参阅 www.stattransfer.com
如果您使用该程序,请注意您必须选择“ASCII/文本 - 分隔”来处理 .csv 文件而不是 .xls
【讨论】:
这是付费的,但您可以下载试用。【参考方案4】:您可以在 StatTransfer、R 或 perl 中执行此操作(正如其他人所提到的),但 StatTransfer 需要花费 $$$,并且 R/Perl 有一个学习曲线。 AM Statistical Software 提供了一个免费的、菜单驱动的统计程序,可以从所有版本的 Stata 中打开和转换 Stata .dta,请参阅:
http://am.air.org/
【讨论】:
顺便说一句,这是 Stata 对 .dta 文件结构的细分,这对于提取数据元素可能很有用:stata.com/help.cgi?dta【参考方案5】: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 = ",")
【讨论】:
【参考方案6】:对于那些有 Stata 的人(即使提问者没有)你可以使用这个:
outsheet 生成一个制表符分隔的文件,因此您需要指定 comma
选项,如下所示
outsheet [varlist] using file.csv , comma
此外,如果您想删除标签(默认情况下包含这些标签
outsheet [varlist] using file.csv, comma nolabel
提示:
http://www.ats.ucla.edu/stat/stata/faq/outsheet.htm
【讨论】:
【参考方案7】:名为Pandas
的 Python 数据分析库确实令人难以置信,具有读取 Stata 文件的功能。
安装Pandas
后你可以这样做:
>>> import pandas as pd
>>> data = pd.io.stata.read_stata('my_stata_file.dta')
>>> data.to_csv('my_stata_file.csv')
太棒了!
【讨论】:
哇,我不敢相信 Pandas 支持 Stata:O 这当然对我有用。非常简单,可以从命令行完成,完全免费 非常感谢!【参考方案8】:使用 R 在几乎任何数据格式之间进行转换的另一种方法是使用 rio 包。
从CRAN 安装 R 并打开 R 使用install.packages("rio")
安装rio
包
加载rio库,然后使用convert()
函数:
library("rio")
convert("my_file.dta", "my_file.csv")
此方法允许您在多种格式之间进行转换(例如,Stata、SPSS、SAS、CSV 等)。它使用文件扩展名来推断格式并使用适当的导入包加载。更多信息请访问R-project rio page。
【讨论】:
我相信这对于那些已经使用过 R 的人来说非常有用,但对于那些没有经验的人(比如我)来说,这可能会令人沮丧。我花了一个多小时的谷歌搜索和反复试验来弄清楚在实际工作之前必须安装的所有不同软件包。 @KennyLJ 我是 R 新手,发现这很容易。刚刚跑了install.packages("rio")
,一切顺利。【参考方案9】:
SPSS 还可以读取 .dta 文件并将其导出为 .csv,但这需要花钱。 PSPP 是 SPSS 的开源版本,比较粗糙,或许也可以读取/导出 .dta 文件。
【讨论】:
【参考方案10】:在 Python 中,可以使用statsmodels.iolib.foreign.genfromdta
来读取 Stata 数据集。此外,还有一个上述函数的包装器,可用于直接从网络读取 Stata 文件:statsmodels.datasets.webuse
。
尽管如此,以上两个都依赖于 pandas.io.stata.StataReader.data
的使用,它现在是一个遗留函数并且已被弃用。因此,现在应该始终使用新的pandas.read_stata
函数而不是。
根据stata.py
的source file,截至0.23.0
版本,支持以下:
Stata 数据文件版本:
104 105 108 111 113 114 115 117 118有效编码:
ascii us-ascii latin-1 latin_1 iso-8859-1 iso8859-1 8859 cp819 拉丁语 拉丁语1 L1正如其他人所指出的,pandas.to_csv
函数可用于将文件保存到磁盘中。相关功能numpy.savetxt
也可以保存数据
作为文本文件。
编辑:
以下详细信息来自 Stata 15.1 中的help dtaversion
:
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 版本的更多信息。 谢谢。我很惊讶地发现这些细节实际上都隐藏在源代码中,所以我想把它们贴在这里供其他人使用。 它们不是“真正埋在源代码中”,而是公开记录。【参考方案11】:有些人提到了SPSS、StatTransfer,它们不是免费的。 R 和 Python(也如上所述)可能是您的选择。但我个人还是推荐Python,语法比R直观多了。你可以在Python中用Pandas的几个命令行来读取和导出大部分常用的数据格式:
将熊猫导入为 pd
df = pd.read_stata('YourDataName.dta')
df.to_csv('YourDataName.csv')
【讨论】:
【参考方案12】:PYTHON - 将目录中的 STATA 文件转换为 CSV
import glob
import pandas
path=r"Path to Folder"
for my_dir in glob.glob("*.dta")[0:1]:
file = path+my_dir # collects all the stata files
# get the file path/name without the ".dta" extension
file_name, file_extension = os.path.splitext(file)
# read your data
df = pandas.read_stata(file, convert_categoricals=False, convert_missing=True)
# save the data and never think about stata again :)
df.to_csv(file_name + '.csv')
【讨论】:
以上是关于不使用Stata软件将dta文件转换为csv的主要内容,如果未能解决你的问题,请参考以下文章