Экспорт результатов - PullRequest
       39

Экспорт результатов

5 голосов
/ 05 февраля 2010

Я уверен, что это проблема, с которой сталкивается любой, кто использует Stata для публикаций или отчетов:

Как вам удобно экспортировать вывод в то, что может быть проанализировано с помощью языка сценариев или Excel?

Есть несколько ado файлов, которые делают это для определенных команд. Например:

  • findit tabout
  • findit outreg2

Но как насчет экспорта вывода команды table? Или результаты anova?

Мне бы очень хотелось услышать о том, как пользователи Stata решают эту проблему для конкретных команд или вообще.

Ответы [ 6 ]

8 голосов
/ 23 марта 2010

После экспериментов с этим я нашел решение, которое работает для меня.

Существует множество 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 - это объединить их в один большой текстовый файл, а затем импортировать этот единственный файл с помощью функции Import Text File... в Excel.

Я объединяю файлы, помещая этот код Ruby в выходную папку, а затем запускаю int из моего файла Do с помощью 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, и я могу получить вам больше информации.

7 голосов
/ 07 февраля 2010

Я обнаружил, что пакет estout является наиболее разработанным и имеет хорошую документацию.

4 голосов
/ 06 декабря 2011

В большинстве уроков добавлено нескольких пакетов , где было бы неплохо иметь только один экспорт всего, что Макс и предлагает своим интересным методом выше.

Я лично использую tabout для сводной статистики и частот, estout для вывода регрессии и пробую mkcorr для корреляционных матриц.

2 голосов
/ 26 мая 2018

Это старый вопрос, и много произошло с момента его публикации.

Stata теперь имеет несколько встроенных команд и функций, которые позволяют любому экспортировать настроенный вывод довольно легко:

Существуют также эквивалентные Mata функции / классы, которые обеспечивают большую гибкость:

По моему опыту, не существует 100% общих решений. Команды, предоставленные сообществом , такие как estout, теперь достаточно развиты для выполнения большинства основных операций Тем не менее, если у вас есть что-то, что даже немного отличается от шаблона, вам придется программировать это самостоятельно.

2 голосов
/ 26 июня 2014

Я использую estpost - часть пакета estout - для табулирования результатов команд без оценки. Вы можете хранить их и экспортировать легко.

Вот пример:

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

Затем можно добавить параметры для изменения форматирования и т. Д.

1 голос
/ 05 февраля 2010

Прошло много времени, но я полагаю, что вы можете выполнить команду log для захвата вывода. <br>log using c:\data\anova_analysis.log, text<br> [commands]<br> log close

...