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.