【问题标题】:Convert a dta file to csv without Stata software不使用Stata软件将dta文件转换为csv
【发布时间】:2011-02-01 22:10:48
【问题描述】:

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

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

File --> "Save as csv"

【问题讨论】:

  • 我确信有办法。如果指定了.DTA文件的格式,就可以变成一个简单的编程练习
  • 它是二进制文件,我不知道如何从那里取出它

标签: csv stata file-conversion


【解决方案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.pysource 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')
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-11-14
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多