我确信这是一个问题,任何使用Stata出版物或报告的人都会遇到:
如何方便地将输出导出为可以通过脚本语言或Excel解析的内容?
有一些ado
个文件可以为特定命令执行此操作。例如:
findit tabout
findit outreg2
但是导出table
命令的输出呢?或anova
?
我很想知道Stata用户如何针对特定命令或一般情况解决此问题。
答案 0 :(得分:8)
经过一段时间的实验,我找到了一个适合我的解决方案。
有多种ADO可以处理导出特定功能。我已将outreg2
用于回归,将tabout
用于摘要统计。
对于更简单的命令,可以轻松编写自己的程序,以自动将结果保存为标准格式的纯文本。这里有一些我写的...请注意,这些都会显示结果(保存到日志文件中)并将它们导出到文本文件中 - 如果您只想保存到文本,则可以删除di
和qui
sum
,tab
等命令:
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的内置函数将数据拉到漂亮漂亮的表中。
我使用vlookup
,offset
,match
,iferror
和带有单元格编号和文件名的隐藏列的组合来执行此操作。源.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命令配合使用。具体来说,它会为以下内容生成发布质量表: