Ocazional, o etapă din munca dumneavoastră (o transformare de date, o analiză) trebuie să fie efectuată în mod repetat, cu unele mici variații. Imaginați-vă că doriți să efectuați mai multe analize de regresie cu un anumit set de variabile independente, de exemplu, pentru a studia efectul acestor variabile asupra unei serii de rezultate. (Rețineți că, pentru o analiză complet simultană a mai multor rezultate, poate că ar putea fi utilizată procedura sureg
; să presupunem doar că nu este ceea ce dorim să facem aici). Desigur, s-ar putea să scrieți prima comandă, să copiați linia de comandă, să schimbați numele variabilei dependente și așa mai departe. Dar buclele fac uneori lucrurile mai ușoare.
Există două moduri de a defini buclele: foreach
se referă la o listă de elemente care urmează să fie enumerate, în timp ceforvalues
se referă la un interval de numere cu efectul că ceea ce urmează este executat pe fiecare dintre aceste numere. Exemplele următoare sperăm că vă vor lămuri.
Bucle cu foreach
Să folosim exemplul cu care am început acest articol. Să presupunem că doriți să investigați efectele venitului, statutului familial și sexului asupra unei serii de variabile dependente (bineînțeles că acest exemplu este extrem de simplificat). Folosind foreach
, acest lucru se poate realiza astfel:
foreach x in excl depr satisfacă happy activ {
regress `x’ income i.famstat gender
}
Aceasta va rula analize de regresie ale variabilelor „excl”, „depr” și așa mai departe pe setul de variabile independente. Numele variabilelor din lista care urmează după „foreach x” vor înlocui succesiv x-ul din linia care începe cu regression
. În locul lui x, se poate folosi orice alt caracter sau șir de caractere.
Atenție la două lucruri: În primul rând, parantezele și plasarea lor. Lista de elemente de pe listă este urmată de o acoladă de deschidere (pe aceeași linie!). Urmează comanda (comenzile) care urmează să fie executată (urmate) pe următoarea (următoarele) linie (linii) – de fapt, pot urma mai multe comenzi care toate vor fi repetate în timp ce Stata lucrează prin lista de elemente de pe listă. Paranteza de închidere urmează pe o linie suplimentară la sfârșit.
În al doilea rând, în interiorul parantezelor, x (sau orice altceva puteți folosi în locul său) este înconjurat de un accent grav, sau gravis, în stânga, și de un apostrof în dreapta. (Tocmai am aflat că programatorii îi spun backquote, backtick sau backgrave – a nu se confunda cu backstop ). Rețineți că manualul Stata (și alte surse Stata) se referă la accentul grav sub denumirea de „ghilimele simple stânga”, dar cel puțin pe tastaturile germane QUWERTZ (și pentru utilizatorii germani care folosesc virgule pentru ghilimelele simple stânga) cred că este mai corect să vorbim despre accentul grav (sau gravis, în franceză: accent grav). Oricum ar fi, uitați-vă la glifa din comanda de mai sus – ceea ce vedeți aici este corect, în timp ce manualul Stata pare adesea înșelător (pentru utilizatorii germani!).
Lista de elemente care urmează după foreach in
nu trebuie să fie neapărat o listă de variabile; poate fi orice listă de elemente. Priviți următorul exemplu care este un caz special în care aceste elemente sunt o serie de numere. Dacă acesta nu este cazul, rămâneți la foreach, dar altfel procedați în același mod.
Bucle cu forvalues
Totdeauna aveți o situație în care ceva, de exemplu, o listă de variabile, este legat de o listă de numere consecutive. Iată un exemplu real din munca mea recentă (unele nume de variabile destul de ciudate au fost simplificate aici). În datele de sondaj, găsiți adesea informații despre membrii gospodăriei în care locuiește respondentul. În acest caz, informațiile despre statutul actual al membrilor au fost stocate în variabilele „hhms_2” până la „hhms_10” (primul membru al gospodăriei este chiar respondentul!). Am dorit să creez, pentru fiecare membru al gospodăriei, o variabilă fictivă care să indice dacă acesta este sau nu angajat (cu diferite tipuri de angajare codificate de la 1 la 4). Una dintre cele câteva modalități de a face acest lucru a fost:
pentruvalorile i= 2/10 {
gen emp’i’ = inrange(hhms_`i’,1,4)
}
Numerele de la 2 la 10 sunt menționate prin indicele „i” în acest exemplu, dar în loc de „i” puteți folosi orice caracter sau șir de caractere (cum ar fi, de exemplu, „număr”), sau chiar numere. În cadrul buclei, indexul este înconjurat de accentul grav (sau gravis) în stânga și de apostrof în dreapta. Atenție: Primul accent grav, adică cel care urmează după „emp”, arată aici ca un apostrof din cauza unor probleme tehnice pe care le-am întâmpinat, dar în viața reală ar trebui să fie întotdeauna un accent grav.
Rezultatul este un număr de variabile noi, numite „emp2” până la „emp10”, cu valori de 1 dacă membrul respectiv al gospodăriei este angajat și 0 în caz contrar.
.