Egyszer előfordul, hogy munkánk egy lépését (egy adattranszformáció, valamilyen elemzés) többször kell végrehajtani, némi eltéréssel. Képzeljük el, hogy például több regressziós elemzést szeretnénk végezni egy adott független változóhalmazzal, hogy megvizsgáljuk e változók hatását egy sor eredményre. (Megjegyezzük, hogy több kimenetel teljesen egyidejű elemzéséhez talán a sureg
eljárást lehetne használni; tegyük fel, hogy mi itt nem ezt akarjuk csinálni). Természetesen megírhatnánk az első parancsot, másolhatnánk a parancssort, kicserélhetnénk a függő változó nevét, és így tovább. De a ciklusok néha megkönnyítik a dolgunkat.
A ciklusok definiálásának két módja van: foreach
a felsorolandó elemek listájára utal, mígforvalues
egy számtartományra utal, azzal a hatással, hogy ami ezután következik, az minden egyes számon végrehajtódik. A következő példák remélhetőleg tisztázzák a helyzetet.
Hurok foreach
Legyen az a példa, amellyel ezt a bejegyzést kezdtem. Tegyük fel, hogy a jövedelem, a családi állapot és a nem hatását szeretnénk vizsgálni egy sor függő változóra (természetesen ez a példa erősen leegyszerűsített). A foreach
segítségével ezt a következőképpen érhetjük el:
foreach x in excl depr satisf happy activ {
regresszió `x’ jövedelem i.famstat gender
}
Ezáltal a “excl”, “depr” és így tovább változók regresszióelemzése a független változók halmazán fog lefutni. A “foreach x” utáni listában szereplő változónevek egymás után fogják helyettesíteni az x-et a regression
-vel kezdődő sorban. Az x helyett bármilyen más karakter vagy karaktersorozat is használható.
Két dolgot mindenképpen vegyünk figyelembe: Először is, a zárójeleket és azok elhelyezését. A lista elemeinek felsorolását egy nyitó zárójel követi (ugyanabban a sorban!). A következő sor(ok)ban a végrehajtandó parancs(ok) következik(nek) – valójában több parancs is következhet, amelyek mindegyike megismétlődik, miközben a Stata a lista elemeinek listáján dolgozik. A záró zárójel a végén egy külön sorban következik.
Második, a zárójeleken belül az x-et (vagy bármit, amit helyette használhatsz) balra egy súlyos ékezet, vagy gravis, jobbra pedig egy aposztróf veszi körül. (Most tudtam meg, hogy a programozók ezt backquote-nak, backticknek vagy backgrave-nek hívják – nem tévesztendő össze a backstoppal ). Megjegyzendő, hogy a Stata kézikönyv (és más Stata-források) a grave ékezetet “szimpla baloldali idézőjel” néven említik, de legalábbis a német QUWERTZ billentyűzeteken (és a német felhasználók számára, akik a szimpla baloldali idézőjelekhez vesszőt használnak) szerintem helyesebb a grave ékezetről (vagy gravis, franciául: accent grave) beszélni. Akárhogy is van, nézze meg a fenti parancsban szereplő írásjelet – amit itt lát, az helyes, míg a Stata kézikönyv gyakran félrevezetőnek tűnik (német felhasználók számára!).
Az foreach in
után következő elemlista nem feltétlenül változók listája; lehet bármilyen elemlista. Nézzük meg a következő példát, amely egy speciális eset, amikor ezek az elemek számsorozatok. Ha nem ez a helyzet, akkor maradjunk a foreach-nál, de egyébként ugyanígy járjunk el.
Hurok forértékekkel
Néha adódik olyan helyzet, amikor valami, például egy változókból álló lista, egymás után következő számok listájához kapcsolódik. Íme egy valós példa a közelmúltbeli munkámból (itt néhány meglehetősen kínos változónevet egyszerűsítettem). A felmérési adatokban gyakran találunk információt a háztartás tagjairól, amelyben a válaszadó él. Ebben az esetben a tagok aktuális állapotára vonatkozó információkat a “hhms_2” – “hhms_10” változókban tároltuk (az első háztartási tag maga a válaszadó!). Minden egyes háztartástaghoz létre kívántam hozni egy dummy változót, amely azt jelzi, hogy foglalkoztatottak-e vagy sem (a különböző típusú foglalkoztatási formák 1-4-ig kódolva). Ennek több módja közül az egyik:
forvalues i= 2/10 {
gen emp’i’ = inrange(hhms_`i’,1,4)
}
A 2-től 10-ig terjedő számokra ebben a példában az “i” index utal, de az “i” helyett bármilyen karaktert vagy karakterláncot (mint pl. “szám”), vagy akár számokat is használhatunk. A cikluson belül az indexet a bal oldalon a grave accent (vagy gravis), a jobb oldalon pedig az aposztróf veszi körül. Figyelem! Az első, azaz az “emp” utáni ékezet itt aposztrófnak látszik néhány technikai probléma miatt, amivel találkoztam, de a való életben mindig ékezetnek kell lennie.
Az eredmény egy sor új változó, “emp2”-től “emp10”-ig, amelyek értéke 1, ha az adott háztartás tagja alkalmazott, és 0 egyébként.