Nested for loop

Fragen zu Stata Syntax und Do-Files.

Nested for loop

Beitragvon hb144 » Mi 23. Sep 2020, 14:27

Hi, ich möchte Personen aus einem Datensatz auf der Basis einiger Informationen matchen (Alter, Anzahl der Kinder, Bildung etc.).
Dazu möchte ich erstmal einen for loop ausführen, um eine Variable zu erstellen, die von 1 bis x die möglichen x Kombinationen aus den unterschiedlichen Informationen sozusagen durchnummeriert, z.B. wenn man 50 ist, 3 Kinder hat und einen Bachelor-Abschluss hat, dann bekommt man die 1 in der neuen Variable zugewiesen. Wenn man 51 ist mit 3 Kindern und Bachelor-Abschluss die 2 usw.
Dafür habe ich den folgenden loop geschrieben:
gen match = .
foreach i in 1 2 3 4 5 6 7 8 9 {
foreach j in 0 1 2 {
foreach k in 0 1 2 3 {
foreach l in 0 1 2 3 4 {
foreach m in 1 2 3 {
foreach n in 0 1 {
replace match = 2 if age_group == `i' & bbrn3_group == `j' & bbrn410_group == `k' & bbrn17_group == `l' & edu == `m' & homeowner == `n'
}
}
}
}
}
}

Ich weiß allerdings nicht, wie ich dafür sorgen kann, dass die Variable match die Werte 1-x (x = Anzahl der Kombinationsmöglichkeiten) annimmt, also wie ich match = 2 ändern muss, damit es so wird wie ich es möchte. Ich hatte an eine Liste list = [1,2,3,4,...,x] gedacht, aber weiß nicht, wie das in Stata geht. x müsste in dem Fall 3240 sein, da es 3240 verschiedene Kombinationsmöglichkeiten gibt (9 x 3 x 4 x 5 x 3 x 2).
Hat jemand eine Idee?

Vielen Dank im Voraus :)
hb144
 
Beiträge: 1
Registriert: Mi 23. Sep 2020, 14:21
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Nested for loop

Beitragvon Staxa » Fr 25. Sep 2020, 11:01

Kannst du nicht Statas Interna zum matchen bzw. mergen benutzen?
Code: Alles auswählen
help merge


Das was du vorhast erscheint mir sehr fehleranfällig und umständlich. Falls du statistisch matchen willst, probiere exaktes Matchen oder CEM. Es gibt ein ausgezeichnetes Ado dazu:
Code: Alles auswählen
ssc install kmatch
help kmatch


Siehe auch : https://www.stata.com/meeting/uk17/slides/uk17_Jann.pdf

Für deine Aufgabe musst du eine local Variable erstellen, etwa so:

Code: Alles auswählen
local counter = 1
foreach NUM1 of numlist 1/10 {
    foreach NUM2 of numlist 1/10 {
        di "`counter'"
        local counter = `counter' + 1
    }
}
Stata für Anfänger: www.statabook.com
Staxa
 
Beiträge: 265
Registriert: Di 27. Feb 2018, 12:56
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post


Zurück zu Stata Syntax

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste