Schleifen (foreach und forvalues)

Gelegentlich muss ein Arbeitsschritt (eine Datentransformation, eine Analyse) wiederholt durchgeführt werden, mit leichten Variationen. Stellen Sie sich vor, dass Sie mehrere Regressionsanalysen mit einem bestimmten Satz unabhängiger Variablen durchführen möchten, um die Wirkung dieser Variablen auf eine Reihe von Ergebnissen zu untersuchen. (Beachten Sie, dass für eine vollständig simultane Analyse mehrerer Ergebnisse vielleicht die Prozedur sureg verwendet werden könnte; nehmen wir einfach an, dass dies nicht das ist, was wir hier tun wollen.) Natürlich könnten Sie den ersten Befehl schreiben, die Befehlszeile kopieren, den Namen der abhängigen Variable austauschen und so weiter. Aber Schleifen machen die Dinge manchmal einfacher.

Es gibt zwei Möglichkeiten, Schleifen zu definieren: foreach bezieht sich auf eine Liste von Elementen, die aufgezählt werden sollen, währendforvalues sich auf einen Bereich von Zahlen bezieht, mit dem Effekt, dass das, was folgt, auf jeder dieser Zahlen ausgeführt wird. Die folgenden Beispiele werden hoffentlich zur Klärung beitragen.

Schleifen mit foreach

Nehmen wir das Beispiel, mit dem ich diesen Eintrag begonnen habe. Nehmen wir an, Sie wollen die Auswirkungen von Einkommen, Familienstand und Geschlecht auf eine Reihe von abhängigen Variablen untersuchen (natürlich ist dieses Beispiel stark vereinfacht). Unter Verwendung von foreach kann dies wie folgt erreicht werden:

foreach x in excl depr satisf happy activ {
regress `x‘ income i.famstat gender
}

Damit werden Regressionsanalysen der Variablen „excl“, „depr“ usw. auf die Menge der unabhängigen Variablen durchgeführt. Die Variablennamen in der Liste, die auf „foreach x“ folgt, ersetzen nacheinander das x in der Zeile, die mit regression beginnt. Anstelle von x kann ein beliebiges anderes Zeichen oder eine beliebige Zeichenfolge verwendet werden.

Beachten Sie zwei Dinge: Erstens, die geschweiften Klammern und ihre Platzierung. Auf die Liste der Elemente der Liste folgt eine öffnende geschweifte Klammer (in derselben Zeile!). Der auszuführende Befehl bzw. die Befehle folgen in der/den nächsten Zeile(n) – es können sogar mehrere Befehle folgen, die alle wiederholt werden, während Stata die Liste der Elemente auf der Liste abarbeitet. Die schließende geschweifte Klammer folgt in einer extra Zeile am Ende.

Zweitens wird x (oder was auch immer Sie an seiner Stelle verwenden) innerhalb der geschweiften Klammern links von einem Gravis und rechts von einem Apostroph umgeben. (Ich habe gerade gelernt, dass Programmierer es backquote, backtick oder backgrave nennen – nicht zu verwechseln mit backstop ). Beachten Sie, dass das Stata-Handbuch (und andere Stata-Quellen) den Grave-Akzent als „einfaches linkes Anführungszeichen“ bezeichnen, aber zumindest auf deutschen QUWERTZ-Tastaturen (und für deutsche Benutzer, die Kommas für einfache linke Anführungszeichen verwenden) halte ich es für korrekter, vom Grave-Akzent (oder gravis, auf Französisch: accent grave) zu sprechen. Wie dem auch sei, schauen Sie sich die Glyphe im obigen Befehl an – was Sie hier sehen, ist korrekt, während das Stata-Handbuch oft irreführend aussieht (für deutsche Benutzer!).

Die Liste der Elemente, die auf foreach in folgt, muss keine Liste von Variablen sein; es kann jede Liste von Elementen sein. Das nächste Beispiel ist ein Spezialfall, bei dem diese Elemente eine Reihe von Zahlen sind. Wenn dies nicht der Fall ist, bleiben Sie bei foreach, gehen aber ansonsten genauso vor.

Schleifen mit forvalues

Manchmal hat man eine Situation, in der etwas, z.B. eine Liste von Variablen, mit einer Liste von aufeinanderfolgenden Zahlen verbunden ist. Hier ein reales Beispiel aus meiner jüngsten Arbeit (einige etwas umständliche Variablennamen wurden hier vereinfacht). In Umfragedaten findet man oft Informationen über die Mitglieder des Haushalts, in dem der Befragte lebt. In diesem Fall wurden die Informationen über den aktuellen Status der Mitglieder in den Variablen „hhms_2“ bis „hhms_10“ gespeichert (das erste Haushaltsmitglied ist der Befragte selbst!). Ich wollte für jedes Haushaltsmitglied eine Dummy-Variable erstellen, die angibt, ob es erwerbstätig ist oder nicht (wobei die verschiedenen Arten der Erwerbstätigkeit mit 1 bis 4 kodiert wurden). Eine von mehreren Möglichkeiten, dies zu tun, war:

fürWerte i= 2/10 {
gen emp’i‘ = inrange(hhms_`i‘,1,4)
}

Die Zahlen 2 bis 10 werden in diesem Beispiel durch den Index „i“ bezeichnet, aber anstelle von „i“ kann man auch ein beliebiges Zeichen oder eine beliebige Zeichenfolge (wie z.B. „Zahl“) oder sogar Zahlen verwenden. Innerhalb der Schleife wird der Index links von einem Gravis und rechts von einem Apostroph umgeben. Achtung! Der erste Gravis, d.h. derjenige, der auf „emp“ folgt, sieht hier aufgrund einiger technischer Probleme, auf die ich gestoßen bin, wie ein Apostroph aus, aber im wirklichen Leben sollte es immer ein Gravis sein.

Das Ergebnis ist eine Reihe neuer Variablen, genannt „emp2“ bis „emp10“, mit Werten von 1, wenn das jeweilige Haushaltsmitglied erwerbstätig ist, und 0 andernfalls.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.