我確定這是一個使用Stata出版物或報告的人遇到的問題:您如何方便地將輸出導出爲可通過腳本語言或Excel解析的內容?導出Stata結果
有幾個ADO文件可用於此特定命令(請嘗試findit tabout
或findit outreg2
)。但是如何輸出table
命令的輸出呢?或者anova
的結果?
我很想聽聽Stata用戶如何針對特定命令或一般情況解決此問題。
我確定這是一個使用Stata出版物或報告的人遇到的問題:您如何方便地將輸出導出爲可通過腳本語言或Excel解析的內容?導出Stata結果
有幾個ADO文件可用於此特定命令(請嘗試findit tabout
或findit outreg2
)。但是如何輸出table
命令的輸出呢?或者anova
的結果?
我很想聽聽Stata用戶如何針對特定命令或一般情況解決此問題。
經過一段時間的實驗後,我發現了一個適用於我的解決方案。
有各種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代碼,然後從我的待辦事項運行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)}
一旦我進口out.txt
到其自己的工作表在Excel中,我用了一堆Excel的內置函數將數據整合到漂亮,漂亮的表格中。
我使用vlookup
,offset
,match
,iferror
的組合以及帶有單元格編號和文件名的隱藏列來執行此操作。源.txt文件包含在out.txt
的正上方,該文件的內容可讓您使用這些函數查找文件的內容,然後使用vlookup
和offset
來引用特定單元格。
這個Excel業務實際上是這個系統中最複雜的一部分,沒有很好的方式來解釋它,但沒有顯示你的文件,但希望你可以得到足夠的想法,爲自己弄明白。如果沒有,請隨時通過http://maxmasnick.com與我聯繫,我可以爲您提供更多信息。
這是一段時間,但我相信你可以發出一個日誌命令來捕獲輸出。
log using c:\data\anova_analysis.log, text
[commands]
log close
大多數教程都會引用several packages,它真的很高興只有一個導出所有內容,這是Max用他有趣的方法所建議的。
我個人使用tabout
作總結統計和頻率,estout
作爲迴歸輸出,我試着用mkcorr
作爲相關矩陣。
我使用estpost-- estout軟件包的一部分來列出來自非估計命令的結果。然後您可以存儲它們並輕鬆導出。
下面是一個例子:
estpost corr varA varB varC varD, matrix
est store corrs
esttab corrs using corrs.rtf, replace
然後,您可以添加選項更改格式等
是的,但隨後你如何合理地分析日誌文件的輸出?我更喜歡以具有更多標準化格式的表單接收輸出(例如製表符分隔的文本文件)。 – 2010-02-08 14:47:20
您可以使用用戶編寫的程序-logout-(來自SSC)解析記錄的結果。這適用於各種結果格式(例如-table-,-anova-,-regress-等)。安裝後,嘗試導出一個-table-命令: *** sysuse auto,清除 註銷,保存(mystuff)excel修復替換:表格中繼rep78,/// c(n mpg mean mpg sd mpg中位數mpg)stubwidth(25) *** – 2010-08-19 02:06:18