4

我确信这是任何使用 Stata 进行出版物或报告的人都遇到过的问题:

您如何方便地将输出导出到可以由脚本语言或 Excel 解析的内容?

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

  • findit tabout
  • findit outreg2

但是导出table命令的输出呢?还是一个的结果anova

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

4

7 回答 7

8

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

有多种 ADO 可以处理导出特定函数。我已经使用outreg2了回归和tabout汇总统计。

对于更简单的命令,您可以轻松编写自己的程序以将结果自动保存为标准格式的纯文本。以下是我写的一些……请注意,它们都显示结果(保存到日志文件)并将它们导出到文本文件中——如果你只想保存到文本中,你可以去掉' dis 和qui,等命令: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 的最佳方法是将它们连接成一个大文本文件,然后使用Import Text File...Excel 中的功能导入该单个文件。

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

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和引用特定单元格offset

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

于 2010-03-23T15:49:57.257 回答
7

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

于 2010-02-07T01:44:28.330 回答
3

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

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

于 2011-12-06T06:19:05.223 回答
3

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

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

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

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

于 2018-05-26T12:56:18.953 回答
1

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

于 2010-02-05T19:27:09.427 回答
1

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

这是一个例子:

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

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

于 2014-06-26T12:37:58.310 回答
0

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

ssc install asdoc

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

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