Tabellenexport aus Stata nach Excel

Nick Bornschein Blog, Statistik

Mit Blick auf die oftmals mühsam erstellten Ergebnisse in Stata erreichten manche Nutzer bis Stata 12 oftmals eine weitere Hürde. Den Export – aus dem wie eine Schreibmaschine aufgebautem Output Fenster – zu kopieren, ging entweder nur über zusätzliche ado-Files, copy & paste oder oftmals auch gar nicht, so dass die Ergebnisse im letzteren Fall mühsam abgetippt werden mussten.

Tabellen aus Stata exportieren mit putexcel

Ab Stata 13 ermöglicht es die Funktion putexcel, praktisch jeden Output nach Excel zu exportieren. Auch wenn dies initial in einigen Fällen mit etwas Mühe verbunden ist, kann ein einmal gespeichertes do-File meist auf andere Fälle mit wenig Aufwand angewendet werden.

In den Daten zur „National Longitudinal Surveys of Young Women and Mature Women“ (NLSW ) Studie aus dem Jahr 1988 wurden die 2246 Befragten nach ihrem Beziehungsstatus befragt. Stata liefert uns in der Häufigkeitstabelle den unschönen Output. Selbst mit copy & paste scheitert man ohne weitere Kenntnisse am Zahlenformat und den Begrenzungen, die Stata für Tabellen vorgibt. Mit Hilfe von putexcel ist der Export nach Excel auf den ersten Blick vielleicht kompliziert, mit Blick darauf, dass später auch beliebig viele Tabellen inklusive Formatvorgaben direkt aus Stata heraus erstellt werden können, aber doch die Mühe wert.

Vorgehen beim Exportieren von Daten aus Stata nach Excel

Zunächst wird der NLSW-Datensatz geladen und mit putexcel set im aktuellen Arbeitspfad eine Excel-Datei (.xlsx) mit dem Namen „Auswertung“ und dem Tabellenblatt „verheiratet“ angelegt. Wichtig dabei ist, dass die Option replace gesetzt wird, da bei einem Fehler in der Berechnung beim nochmaligen Ausführen Teile der existierenden Excel-Datei ggf. nicht ersetzt werden.


sysuse nlsw88.dta
putexcel set Auswertung, sheet(„verheiratet“) replace

Es folgt der für Anfänger zunächst schwierigere Teil des Exports. Mittels local row = 1, werden alle späteren Berechnungen und Benennungen innerhalb der Excel-Datei gesteuert, ohne dass man spezifische Zellbezüge von Hand angeben muss. Im Rahmen des Beispiels wurde diese Programmierung dennoch etwas vereinfacht, voll automatisierte Tabellen-Exports sind problemlos möglich. Zudem wird über global var = "married" die Variable direkt angesteuert, um später das Label und die Codes automatisch abzuziehen.


local row = 1
global var = "married"

Mit Hilfe des tabulate Befehls, der die Ergebnisse der Tabelle nur mit den Optionen matcell und matnames für die weitere Verwendung im Hintergrund abspeichert, wird die Anzahl der Zeilen – also praktisch die Anzahl der Kategorien der Variable – ausgelesen (local rows), zudem wird für die spätere Prozentuierung der Wert 0 vergeben.


tabulate married, miss matcell(freq) matrow(names)
local rows = rowsof(names)
local cum_percent = 0

In diesem Beispiel wird die Kopfzeile der Tabelle nur halbautomatisch gesetzt, da hier sonst eine andere Herangehensweise an die Programmierung hätte gewählt werden müssen. Das Ansteuern der Zellen erfolgt mit dem zu Beginn gesetzten local row, allerdings ohne händische Zuweisung.


putexcel A`row’=(„verheiratet?“) B`row’=(„N“) C`row’=(„%“) D`row’=(„kum. %“), bold hcenter
local row = `row‘ + 1

Kernstück der Programmierung ist eine Schleife, die Zeile für Zeile, d.h. pro Kategorie der Variable, den Export nach Excel übernimmt. Die Schleife steuert sich automatisch ab Zeile 1 bis zur letzten Kategorie (forvalues i = 1/`rows‘) und nimmt die Labels der Kategorien aus dem tabulate Befehl mit Hilfe der Matrix names auf (local val bzw. local val_lab). Die Prozentuierung wird direkt berechnet, da diese Informationen in der Matrix selbst nicht gespeichert werden, allerdings Zugriff auf alle relevanten Werte besteht (local percent_val bzw. local cum_percent). Die beiden schließenden putexcel Befehle führen dann den Export der Informationen für eine Zeile direkt durch. Innerhalb der Schleife wird dann die nächste Zeile mit row + 1 in Angriff genommen.


* Loop über alle Zeilen
forvalues i = 1/`rows‘ {
  * Berechnung der Werte
  local val = names[`i‘,1] 
  local val_lab : label ($var) `val‘
  local freq_val = freq[`i‘,1] 
  local percent_val = `freq_val’/`r(N)’* 100
  local percent_val : display %9.2f `percent_val‘
  local cum_percent : display %9.2f (`cum_percent‘ + `percent_val‘)
  * Schreiben nach Excel
  putexcel A`row’=(„`val_lab'“)
  putexcel B`row’=(`freq_val‘) C`row’=(`percent_val‘) D`row’=(`cum_percent‘)
  * Zeile hochzählen
  local row = `row‘ + 1
}

Abschließend wird die letzte Zeile mit den Ergebnissen der Summe über das Setzen einer Excel-Formel berechnet. Die Tabelle ist damit vollständig in Excel berechnet und teilweise formatiert (bold bzw. hcenter aus dem ersten putexcel-Befehl oben).


putexcel A`row’=(„Gesamt“)
putexcel B`row’=formula(SUM(B2:B3)) C`row’=formula(SUM(C2:C3))

Zusammenfassung

Mit ausreichenden Kenntnissen im Bereich der Stata-Programmierung lässt sich diese Syntax auf beliebige Tabellen automatisieren. Außerdem ist hinsichtlich Variablennamen und –labels eine Programmierung über eine Schleife zur Erstellung von Tabellen über beliebig viele Fragen auf einmal möglich. Diese und andere Stata-Kenntnisse werden auch in den unseren Workshop Statistik mit Stata vermittelt. Bei anderen Fragen zum Thema Stata Programmierung stehen dir unsere Statistik Berater gerne zur Verfügung.

Über den Autor
Nick Bornschein

Nick Bornschein

Nick ist Teamleiter unserer Statistik Unit und zuständig für alle wissenschaftlichen und medizinischen Projekte. In seiner Freizeit ist er begeisterter Brettspieler und Radfahrer.

ABOUT US


STATWORX
is a consulting company for data science, statistics, machine learning and artificial intelligence located in Frankfurt, Zurich and Vienna. Sign up for our NEWSLETTER and receive reads and treats from the world of data science and AI.