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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top