ANALIZA DANYCH W STATA 8.0 CZĘŚĆ II ZAJĘCIA 1 (CZĘŚĆ II) Będziemy pracować na pliku bory tucholskie.dta Wszystkie przykłady najlepiej jest robić w Do-file Editor (wejście: doedit) Cudzysłowia " " oraz `" "' Cudzysłowia podwójne mogą być " " lub `" "' jest to to samo. Cudzysłowia `" "' są inne lewostronne i prawostronne. help macro Makra lokalne i globalne: local, global Makra lokalne: local (max. 31 znaków) Makra globalne: global (max. 32 znaków) Tworzenie local global nazwa makra = wyrażenie tekst "tekst" `"tekst"' : rozszerzona funkcja (tzw. extended macro function) (zob. help macro) W celu zobaczenia listy rozszerzonych funkcji, zob. pomoc help macro Odwoływanie się `makro_lokalne $makro_globalne Odwoływanie się bez tworzenia makra `= wyrażenie `: rozszerzona funkcja (tzw. extended macro function) CZĘŚĆ II ZAJĘCIA 1: 1/10
Uproszczone zwiększanie i zmniejszanie wartości makr o 1 local kot = `kot + 1 równoznaczne local ++kot local kot = `kot 1 równoznaczne local - kot `++kot lub `--kot Najpierw następuje zmiana wartości makra kot, a potem wykonywane jest polecenie na nowej wartości makra kot `kot++ lub `kot-- Najpierw następuje wykonanie polecenia na starej wartości makra kot, a potem jest zmiana wartości makra kot Makra lokalne są tak naprawdę makrami globalnymi poprzedzonymi podkreśleniem local kot = 8 równoznaczne global _kot = 8 display `kot równoznaczne display $_kot macro list wyświetla dostępne makra; macro drop kasuje makra Przykład 1: local kot = 3+4 local kot1 5+6 local kot2 "7+8" local kiziak `"kocur wielki"' local kot7 "ziak" display "`ki`kot`kot'''`kiziak'" display "$_kot" display `kot1' display "`kot1'" Przykład 2: global pies = 2 global pies2 pies global pies22 tygrys display "$pies2$pies" display "${pies2$pies" Przykład 3: local zwierzak : type prze display "`zwierzak'" local konin: format han display "`konin'" CZĘŚĆ II ZAJĘCIA 1: 2/10
Przykład 4: summarize pkb in `=3-2'/10 label data `:variable label bud' describe sort bud by `:sortedby': `="li"+"st"' Przykład 5: macro list macro drop _all macro list Przykład 6: local kot = 3 list prze in `++kot' list prze in `kot' list prze in `--kot' local kot = 3 list prze in `kot++' list prze in `kot' list prze in `kot--' help else Instrukcja warunkowa: if if warunek pojedyncze_polecenie lub if warunek { polecenia OPCJONALNIE NASTĘPNIE else if warunek pojedyncze_polecenie lub NASTĘPNIE else pojedyncze_polecenie lub else if warunek { polecenia else { polecenia CZĘŚĆ II ZAJĘCIA 1: 3/10
Pętla: forvalues help forvalues Przykład 7: forvalues kot = 3(-2)-8 { display `kot forvalues kot = 3 4.5 to 10 { display `kot forvalues kot = 3 4.5 : 10 { display `kot forvalues kot = 3/100 { display `kot help foreach Przykład 8: Pętla: foreach foreach kot in "bialy czarny" granatowy { display "`kot'" local kiziak `" "bialy czarny" granatowy "' foreach kot of local kiziak { display "`kot'" foreach kot of numlist 4/6.5 89(0.1)90 10000 1 2 to 5-900[3]-888 { display "`kot'" CZĘŚĆ II ZAJĘCIA 1: 4/10
Pętla: while help while while wyrażenie { polecenia Polecenia są wykonywane, jeżeli wyrażenie jest prawdziwe. Przykład 9: capture program drop kocur capture program drop mariuszek program mariuszek version 8.0 local i = 1 while "``i''"!= "" { local ++i local --i global i = `i' kocur `*' end program kocur version 8.0 capture drop *_s forvalues kiziak = 1/$i { quietly summarize ``kiziak'' generate ``kiziak''_s = (``kiziak'' - r(mean))/(r(sd)) #delimit ; label variable ``kiziak''_s `"`="`: variable label ``kiziak'''"+" wystandaryzowane"'"' ; #delimit cr end mariuszek prze bud han describe CZĘŚĆ II ZAJĘCIA 1: 5/10
Odwoływanie się do zmiennych podawanych po nazwie programu polecenie: args help args `0 Wszystko podane po nazwie programu dokładnie tak, jak zostało napisane `1 `2 `3... Pierwszy, drugi, trzeci itd. ciąg znaków podany po nazwie programu `* Wszystkie ciągi znaków podane po nazwie programów, oddzielone POJEDYNCZĄ SPACJĄ Różnica między `0 i `* : `* zawiera pojedyncze spacje i ciągi znaków nie są ujęte w cudzysłowie args kot kotek kocur oznacza: `1 jest równoważne `kot `2 jest równoważne `kotek `3 jest równoważne `kocur Przykład 10: capture program drop kiziak program kiziak display `"`0'"' display `"`*'"' display "`0'" end kiziak "KOCUR WSPANIALY" super "kot" Przykład 11: capture program drop mariuszek program mariuszek args kot kotek display `" `1';`kot';`2';`kotek';`3';`4' "' end mariuszek sarna tygrys ##@# "kocurzysko piekne" CZĘŚĆ II ZAJĘCIA 1: 6/10
Odwoływanie się do zmiennych podawanych po nazwie programu polecenie: syntax help syntax Dzięki poleceniu syntax, Stata interpretuje ciągi znaków według standardowej składni, która wygląda następująco: Polecenie Lista zmiennych Lista nazw Ograniczenie if Ograniczenie in using nazwa pliku = wyrażenie [wagi], opcje Cokolwiek W celu zapoznania się z poleceniem syntax, zob. dokładnie pomoc: help syntax Polecenie syntax sprawdza, czy składnia podana po nazwie programu jest poprawna; jeżeli nie jest poprawna, program przerywa działanie Jeżeli użytkownik po nazwie programu musi podać daną rzecz (np. listę zmiennych, ograniczenie if lub in, czy jakąś opcję), w poleceniu syntax nie używa się nawiasu kwadratowego Jeżeli użytkownik po nazwie programu może opcjonalnie podać daną rzecz (np. listę zmiennych, ograniczenie if lub in, czy jakąś opcję), w poleceniu syntax używa się nawiasu kwadratowego Polecenie syntax interpretuje elementy podane po nazwie programu i trzyma je w makrach: `varlist `varname `newvarlist `newvarname `namelist `name `anything `if `in `using `exp `weight `nazwa_opcji `options W poleceniu syntax: if makro `if zawiera if oraz warunek ograniczający W poleceniu syntax: if/ makro `if zawiera warunek ograniczający W poleceniu syntax: in makro `in zawiera in oraz warunek ograniczający W poleceniu syntax: in makro `in zawiera warunek ograniczający CZĘŚĆ II ZAJĘCIA 1: 7/10
W poleceniu syntax: using makro `using zawiera using oraz nazwę pliku W poleceniu syntax: using/ makro `using zawiera nazwę pliku W poleceniu syntax: =exp makro `exp zawiera znak równości, spację i wyrażenie W poleceniu syntax: =/exp makro `exp zawiera wyrażenie W poleceniu syntax: [, *] dopuszczamy inne opcje, które są trzymane w makrze `options Wagi są zawsze opcjonalne; muszą być umieszczone w nawiasie kwadratowym [] W celu zapoznania się ze składnią opcji, zob. dokładnie część option descriptor do pomocy polecenia syntax (help syntax). help tokenize Polecenie: tokenize Polecenie tokenize dzieli ciąg znaków na mniejsze ciągi znaków i trzyma je w makrach: `1 `2 `3 `* W domyśle separatorem ciągu znaków jest spacja. Można także ustawić inne separatory opcja parse. Przykład 12: tokenize kot kotowy maly display "`1';`2';`3';`4 " display "`*'" Przykład 13: tokenize kot kotowy maly, parse(" o") display "`1';`2';`3';`4'" display "`*'" Przykład 14: tokenize display "`1';`2';`3';`4'" display "`*'" CZĘŚĆ II ZAJĘCIA 1: 8/10
Przykład 15: Chcemy stworzyć program, który dla podanych zmiennych będzie robił różne rzeczy, w zależności od podanych przez użytkownika opcji: opcja niezbędna: o co(korelacja) wyświetla macierz korelacji o co(regresja) wyświetla równanie regresji (pierwsza zmienna objaśniana) opcja dodatkowa tylko dla współczynników korelacji: o wartosc(liczba z przedziału 0-1) wyświetla tylko te współczynniki korelacji, których wartość bezwzględna jest większa równa niż podana liczba z przedziału 0-1 Dopuszczamy ograniczenia in oraz if. Muszą być podane co najmniej 2 zmienne po nazwie programu. Ważenie zmiennych nie jest możliwe. Kod programu: capture program drop mariuszek program mariuszek version 8.0 syntax varlist(min=2) [if] [in], co(name) [wartosc(numlist >=0 <=1 max=1)] // Czesc I: Obliczenia do korelacji if "`co'" == "korelacja" { tokenize `varlist' local i = 1 while "``i''"!= "" { local ++i local --i forvalues wiersz = 1/`i' { forvalues kolumna = 1/`i' { quietly correlate ``kolumna'' ``wiersz'' `if' `in' local wspolczynnik`wiersz'`kolumna' = r(rho) preserve nobreak { drop _all set obs `i' forvalues kit = 1/`i' { quietly generate k`kit' =. CZĘŚĆ II ZAJĘCIA 1: 9/10
forvalues wiersz = 1/`i' { forvalues kolumna = 1/`i' { if "`wartosc'"!= "" { if abs(`wspolczynnik`wiersz'`kolumna'') >= `wartosc' { quietly replace k`kolumna' = `wspolczynnik`wiersz'`kolumna'' in `wiersz' else quietly replace k`kolumna' = `wspolczynnik`wiersz'`kolumna'' in `wiersz' unab zyrafa: k* capture matrix drop macierz_korelacji mkmat `zyrafa', matrix(macierz_korelacji) restore matrix rownames macierz_korelacji = `*' matrix colnames macierz_korelacji = `*' matrix list macierz_korelacji // Czesc II: Obliczenia do regresji else if "`co'" == "regresja" { if "`wartosc'"!= "" { display "Opcja wartosc w przypadku regresji niedopuszczalna" exit tokenize `varlist' local y "`1'" macro shift local x "`*'" regress `y' `x' `if' `in' else display "Opcja co(`co') nie jest dopuszczalna" end Przykładowe działanie programu: mariuszek prze bud han rol in 1/10, co(korelacja) mariuszek prze bud han rol in 1/10, co(korelacja) wartosc(0.3) mariuszek prze bud han rol in 10/l if pkb>100, co(regresja) CZĘŚĆ II ZAJĘCIA 1: 10/10