Pregunta
Estoy seguro de que este es un problema que se ha encontrado con cualquier persona que use STATA para publicaciones o informes:
¿Cómo exporta convenientemente su salida a algo que puede ser analizado por un lenguaje de secuencias de comandos o Excel?
Hay algunos ado
archivos que hacen esto para comandos específicos. Por ejemplo:
findit tabout
findit outreg2
Pero, ¿qué hay de exportar la salida del table
¿dominio? O los resultados de un anova
?
Me encantaría saber cómo los usuarios de Stata abordan este problema para comandos específicos o en general.
Solución
Esta es una vieja pregunta y mucho ha sucedido desde que fue publicado.
Stata ahora tiene varios comandos y funciones incorporados que permiten a cualquiera exportar la salida personalizada con bastante facilidad:
También hay equivalente Mata
funciones / clases, que ofrecen una mayor flexibilidad:
Según mi experiencia, no hay soluciones generales al 100%. Conflicto a la comunidad comandos como estout
ahora son lo suficientemente maduros para manejar la mayoría de las operaciones básicas. Dicho esto, si tiene algo que se desvía incluso de la plantilla, tendrá que programar esto usted mismo.
Otros consejos
Después de experimentar con esto por un tiempo, he encontrado una solución que funciona para mí.
Hay una variedad de ADO que manejan la exportación de funciones específicas. He utilizado outreg2
para regresiones y tabout
para estadísticas resumidas.
Para comandos más simples, es fácil escribir sus propios programas para guardar los resultados automáticamente en texto sin formato en un formato estándar. Aquí hay algunos que escribí ... Tenga en cuenta que ambos muestran resultados (para guardar en un archivo de registro) y exportarlos a archivos de texto; si solo desea guardar en el texto, podría deshacerse del di
'arena qui
la sum
, tab
, etc. Comandos:
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
La pregunta es entonces cómo obtener la salida en Excel y formatearla. Descubrí que la mejor manera de importar los archivos de salida de texto de STATA a Excel es concatenarlos en un archivo de texto grande y luego importar ese archivo único utilizando el Import Text File...
característica en Excel.
Concateno los archivos colocando este código Ruby en la carpeta de salida y luego ejecutando int desde mi archivo do con 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)}
Una vez que importe out.txt
En su propia hoja en Excel, uso un montón de funciones incorporadas de Excel para unir los datos en tablas bonitas y bonitas.
Yo uso una combinación de vlookup
, offset
, match
, iferror
, y columnas ocultas con números de celda y nombres de archivo para hacer esto. El archivo .txt de origen se incluye en out.txt
Justo encima del contenido de ese archivo, que le permite buscar el contenido del archivo utilizando estas funciones y luego hacer referencia a celdas específicas usando vlookup
y offset
.
Este negocio de Excel es en realidad la parte más complicada de este sistema y realmente no hay una buena manera de explicarlo sin mostrarle el archivo, aunque con suerte puede tener suficiente idea para resolverlo usted mismo. Si no, no dude en ponerse en contacto conmigo http://maxmasnick.com Y puedo obtener más información.
He descubierto que el paquete estrout es el más desarrollado y tiene buena documentación.
La mayoría de los tutoriales lanzan Varios paquetes Donde de hecho sería bueno tener solo uno exportando todo, que es lo que Max sugiere anteriormente con su interesante método.
Yo personalmente uso tabout
Para estadísticas y frecuencias sumarias, estout
para la producción de regresión, y estoy probando mkcorr
para matriz de correlación.
Ha pasado un tiempo, pero creo que puede emitir un comando de registro para capturar la salida.
log using c:\data\anova_analysis.log, text
[commands]
log close
Utilizo Estpost, parte del paquete ESTOut, para tabular los resultados de los comandos de no estimación. Luego puede almacenarlos y exportarlos fácilmente.
Aquí hay un ejemplo:
estpost corr varA varB varC varD, matrix
est store corrs
esttab corrs using corrs.rtf, replace
Luego puede agregar opciones para cambiar el formato, etc.