Od czasu do czasu jakiś krok w Twojej pracy (fragment transformacji danych, jakaś analiza) musi być wykonywany wielokrotnie, z pewnymi niewielkimi zmianami. Wyobraź sobie, że chcesz wykonać kilka analiz regresji z danym zestawem zmiennych niezależnych, na przykład, aby zbadać wpływ tych zmiennych na serię wyników. (Zauważ, że dla w pełni jednoczesnej analizy kilku wyników, być może można by użyć procedury sureg
; załóżmy, że nie to chcemy tutaj zrobić). Oczywiście, mógłbyś napisać pierwsze polecenie, skopiować wiersz poleceń, zamienić nazwę zmiennej zależnej, i tak dalej. Ale pętle czasami ułatwiają sprawę.
Istnieją dwa sposoby definiowania pętli: foreach
odnosi się do listy elementów do wyliczenia, natomiastforvalues
odnosi się do zakresu liczb z takim skutkiem, że to, co następuje, jest wykonywane na każdej z tych liczb. Poniższe przykłady, mam nadzieję, to wyjaśnią.
Pętle z foreach
Wykorzystajmy przykład, od którego zacząłem ten wpis. Załóżmy, że chcemy zbadać wpływ dochodu, statusu rodzinnego i płci na szereg zmiennych zależnych (oczywiście przykład ten jest grubo uproszczony). Używając foreach
, można to osiągnąć w następujący sposób:
foreach x in excl depr satisf happy activ {
regress `x’ income i.famstat gender
}
W ten sposób zostaną uruchomione analizy regresji zmiennych „excl”, „depr” i tak dalej na zestawie zmiennych niezależnych. Nazwy zmiennych z listy następującej po „foreach x” będą kolejno zastępowały x w wierszu zaczynającym się od regression
. Zamiast x można użyć dowolnego innego znaku lub ciągu znaków.
Zwróć uwagę na dwie rzeczy: Po pierwsze, nawiasy klamrowe i ich umiejscowienie. Po liście elementów na liście następuje nawias otwierający (w tej samej linii!). Polecenie(a) do wykonania następuje(ą) w następnej linii(ach) – właściwie, może po nim następować kilka poleceń, które będą powtarzane podczas pracy Staty nad listą elementów listy. Nawias zamykający następuje w dodatkowej linii na końcu.
Po drugie, wewnątrz nawiasów klamrowych, x (lub cokolwiek innego, co możesz użyć w jego miejsce) jest otoczone akcentem grave, lub gravis, po lewej stronie i apostrofem po prawej. (Właśnie się dowiedziałem, że programiści nazywają to backquote, backtick lub backgrave – nie mylić z backstop ). Zauważ, że podręcznik Stata (i inne źródła Stata) odnoszą się do akcentu grave pod nazwą „pojedynczy lewy cudzysłów”, ale przynajmniej na niemieckich klawiaturach QUWERTZ (i dla niemieckich użytkowników, którzy używają przecinków dla pojedynczych lewych cudzysłowów) myślę, że bardziej poprawne jest mówienie o akcencie grave (lub gravis, po francusku: accent grave). Tak czy inaczej, spójrz na glif w powyższym poleceniu – to, co widzisz tutaj, jest poprawne, podczas gdy podręcznik Staty często wygląda myląco (dla niemieckich użytkowników!).
Lista elementów, która następuje po foreach in
nie musi być listą zmiennych; może to być dowolna lista elementów. Spójrz na następny przykład, który jest szczególnym przypadkiem, gdy te elementy są serią liczb. Jeśli tak nie jest, trzymaj się foreach, ale poza tym postępuj w ten sam sposób.
Pętle z forvalues
Czasami masz sytuację, w której coś, np. lista zmiennych, jest związana z listą kolejnych liczb. Oto prawdziwy przykład z mojej ostatniej pracy (niektóre dość kłopotliwe nazwy zmiennych zostały tutaj uproszczone). W danych ankietowych często można znaleźć informacje o członkach gospodarstwa domowego, w którym mieszka respondent. W tym przypadku informacje o aktualnym statusie członków gospodarstwa domowego były przechowywane w zmiennych od „hhms_2” do „hhms_10” (pierwszym członkiem gospodarstwa domowego jest sam respondent!). Chciałem stworzyć dla każdego członka gospodarstwa domowego zmienną dummy wskazującą, czy jest on zatrudniony, czy nie (z różnymi rodzajami zatrudnienia kodowanymi jako 1 do 4). Jednym z kilku sposobów, by to zrobić, było:
forvalues i= 2/10 {
gen emp’i’ = inrange(hhms_`i’,1,4)
}
Liczby od 2 do 10 są w tym przykładzie określane przez indeks „i”, ale zamiast „i” można użyć dowolnego znaku lub ciągu znaków (takiego jak np. „liczba”), a nawet cyfr. Wewnątrz pętli indeks jest otoczony akcentem grobowym (lub gravis) po lewej stronie i apostrofem po prawej. Uwaga: Pierwszy akcent grobowy, tj. ten następujący po „emp”, wygląda tu jak apostrof z powodu pewnych problemów technicznych, które napotkałem, ale w prawdziwym życiu powinien to być zawsze akcent grobowy.
W wyniku otrzymujemy szereg nowych zmiennych, nazwanych od „emp2” do „emp10”, o wartościach 1, jeśli odpowiedni członek gospodarstwa domowego jest zatrudniony, i 0 w przeciwnym wypadku.
.