【问题标题】:Exporting results导出结果
【发布时间】:2010-02-05 19:16:04
【问题描述】:

我敢肯定,任何使用 Stata 发布或报告的人都遇到过这个问题:

您如何方便地将您的输出导出到可以被脚本语言或 Excel 解析的东西?

有一些ado 文件可以为特定命令执行此操作。例如:

  • findit tabout
  • findit outreg2

但是如何导出table 命令的输出呢?还是anova 的结果?

我很想听听 Stata 用户如何针对特定命令或一般命令解决此问题。

【问题讨论】:

    标签: statistics stata


    【解决方案1】:

    在试验了一段时间后,我找到了一个适合我的解决方案。

    有多种 ADO 可以处理导出特定函数。我使用outreg2 进行回归,使用tabout 进行汇总统计。

    对于更简单的命令,您可以轻松编写自己的程序以将结果自动保存为标准格式的纯文本。这是我写的一些……请注意,这两个都显示结果(保存到日志文件)并将它们导出到文本文件中——如果你只想保存到文本中,你可以去掉di's和quisumtab等命令:

    cap program drop sumout
    program define sumout
        di ""
        di ""
        di "Summary of `1'"
        di ""
        sum `1', d
        qui matrix X = (r(mean), r(sd), r(p50), r(min), r(max))
        qui matrix colnames X = mean sd median min max
        qui mat2txt, matrix(X) saving("`2'") replace
    end
    
    cap program drop tab2_chi_out
    program define tab2_chi_out
        di ""
        di ""
        di "Tabulation of `1' and `2'"
        di ""
        tab `1' `2', chi2
        qui matrix X = (r(p), r(chi2))
        qui matrix colnames X = chi2p chi2
        qui mat2txt, matrix(X) saving("`3'") replace
    end
    
    
    cap program drop oneway_out
    program define oneway_out
        di ""
        di ""
        di "Oneway anova with dv = `1' and iv = `2'"
        di ""
        oneway `1' `2'
        qui matrix X = (r(F), r(df_r), r(df_m), Ftail(r(df_m), r(df_r), r(F)))
        qui matrix colnames X = anova_between_groups_F within_groups_df between_groups_df P
        qui mat2txt, matrix(X) saving("`3'") replace
    end
    
    cap program drop anova_out
    program define anova_out
        di ""
        di ""
        di "Anova command: anova `1'"
        di ""
        anova `1'
        qui matrix X = (e(F), e(df_r), e(df_m), Ftail(e(df_m), e(df_r), e(F)), e(r2_a))
        qui matrix colnames X = anova_between_groups_F within_groups_df between_groups_df P RsquaredAdj
        qui mat2txt, matrix(X) saving("`2'") replace
    end
    

    接下来的问题是如何将输出输入 Excel 并对其进行格式化。我发现将文本输出文件从 Stata 导入 Excel 的最佳方法是将它们连接成一个大文本文件,然后使用 Excel 中的Import Text File... 功能导入该单个文件。

    我通过将此 Ruby 代码放在输出文件夹中,然后使用 qui shell cd path/to/output/folder/ && ruby table.rb 从我的 Do 文件运行 int 来连接文件:

    output = ""
    Dir.new(".").entries.each do |file|
      next if file =~/\A\./ || file == "table.rb" || file == "out.txt"
      if file =~ /.*xml/
        system "rm #{file}"
        next
      end
    
      contents = File.open(file, "rb").read
    
      output << "\n\n#{file}\n\n" << contents
    end
    
    
    File.open("out.txt", 'w') {|f| f.write(output)}
    

    一旦我将out.txt 导入到 Excel 中自己的工作表中,我就会使用 Excel 的一系列内置函数将数据整合到漂亮、漂亮的表格中。

    我使用vlookupoffsetmatchiferror 的组合以及带有单元格编号和文件名的隐藏列来执行此操作。源 .txt 文件包含在该文件内容上方的out.txt 中,您可以使用这些函数查找文件的内容,然后使用vlookupoffset 引用特定单元格。

    这个 Excel 业务实际上是这个系统中最复杂的部分,如果不向您显示文件,确实没有好的方法来解释它,但希望您能得到足够的想法来自己弄清楚。如果没有,请随时通过http://maxmasnick.com 与我联系,我可以为您获取更多信息。

    【讨论】:

      【解决方案2】:

      我发现estout package 是最发达的并且有很好的文档。

      【讨论】:

        【解决方案3】:

        这是一个老问题,自发布以来发生了很多

        Stata 现在有几个内置命令和功能,允许任何人 导出自定义输出相当容易:

        还有等效的Mata 函数/类,提供更大的灵活性:

        根据我的经验,没有 100% 通用的解决方案。 社区贡献命令,例如estout,现在已经足够成熟,可以处理大多数基本操作。也就是说,如果您有一些与模板稍有偏差的东西,您将不得不自己编程。

        【讨论】:

          【解决方案4】:

          大多数教程都输入several packages,其中只有一个导出所有内容确实不错,这就是 Max 在上面用他有趣的方法提出的建议。

          我个人将tabout 用于汇总统计和频率,estout 用于回归输出,我正在尝试mkcorr 用于相关矩阵。

          【讨论】:

            【解决方案5】:

            已经有一段时间了,但我相信您可以发出日志命令来捕获输出。
            log using c:\data\anova_analysis.log, text
            [commands]
            log close

            【讨论】:

            • 是的,但是你如何合理地解析日志文件的输出呢?我更喜欢以具有更标准化格式的形式接收输出(例如,制表符分隔的文本文件)。
            • 您可以使用用户编写的程序 -logout-(来自 SSC)来解析记录的结果。这适用于各种结果格式(例如 -table-、-anova-、-regress- 等)。安装后,尝试导出 -table- 命令:*** sysuse auto, clear logout, save(mystuff) excel fix replace: table trunk rep78, /// c(n mpg mean mpg sd mpg median mpg)stubwidth( 25) ***
            【解决方案6】:

            我使用 estpost(estout 包的一部分)将非估计命令的结果制成表格。然后,您可以存储它们并轻松导出。

            这是一个例子:

            estpost corr varA varB varC varD, matrix
            est store corrs
            esttab corrs using corrs.rtf, replace 
            

            然后您可以添加选项来更改格式等。

            【讨论】:

              【解决方案7】:

              您可以使用 SSC 上提供的 asdoc。要下载,

              ssc install asdoc
              

              asdoc 适用于几乎所有的 Stata 命令。具体来说,它为以下对象生成出版质量表:

              1. summarize 命令 - 报告汇总统计信息
              2. cor 或 pwcorr 命令 - 报告相关性
              3. tabstat - 用于描述性统计的灵活表格
              4. 制表 - 用于单向、二向、三向制表
              5. regress - 用于详细、嵌套和广泛的回归表
              6. table - 灵活的表格 还有很多。您可以在此处探索有关 asdoc 的更多信息 https://fintechprofessor.com/2018/01/31/asdoc/

              【讨论】:

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