导出结果

时间:2010-02-05 19:16:05

标签: statistics stata

我确信这是一个问题,任何使用Stata出版物或报告的人都会遇到:

如何方便地将输出导出为可以通过脚本语言或Excel解析的内容?

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

  • findit tabout
  • findit outreg2

但是导出table命令的输出呢?或anova

的结果

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

7 个答案:

答案 0 :(得分:8)

经过一段时间的实验,我找到了一个适合我的解决方案。

有多种ADO可以处理导出特定功能。我已将outreg2用于回归,将tabout用于摘要统计。

对于更简单的命令,可以轻松编写自己的程序,以自动将结果保存为标准格式的纯文本。这里有一些我写的...请注意,这些都会显示结果(保存到日志文件中)并将它们导出到文本文件中 - 如果您只想保存到文本,则可以删除diqui sumtab等命令:

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代码放在output文件夹中,然后使用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)}

在Excel中将out.txt导入到自己的工作表后,我使用一堆Excel的内置函数将数据拉到漂亮漂亮的表中。

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

这个Excel业务实际上是这个系统中最复杂的部分,并且没有向你展示文件就没有好的方法来解释它,尽管希望你能够有足够的想法自己解决这个问题。如果没有,请随时通过http://maxmasnick.com与我联系,我可以为您提供更多信息。

答案 1 :(得分:7)

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

答案 2 :(得分:4)

大多数教程都会引入several packages,只有一个导出所有东西真的很好,这就是Max上面用他有趣的方法所建议的。

我个人使用tabout获取摘要统计信息和频率,estout用于回归输出,我正在尝试mkcorr用于相关矩阵。

答案 3 :(得分:2)

我使用estpost-- estout包的一部分 - 来表示来自非估计命令的结果。然后,您可以存储它们并轻松导出。

以下是一个例子:

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

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

答案 4 :(得分:2)

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

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

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

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

答案 5 :(得分:1)

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

答案 6 :(得分:0)

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

ssc install asdoc

asdoc几乎可以与所有Stata命令配合使用。具体来说,它会为以下内容生成发布质量表:

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