jest to część szósta wprowadzenia do Stata. Jeśli jesteś nowy w Stata, zalecamy rozpoczęcie od początku.
przejdź do treści poniższego filmu
Ten artykuł nauczy Cię podstaw tworzenia nowych zmiennych, modyfikowania istniejących zmiennych i tworzenia etykiet.
Generowanie i zastępowanie
podstawowymi poleceniami do tworzenia i zmiany zmiennych są generowanie (zwykle w skrócie gen) i zastępowanie (które, podobnie jak inne polecenia, które mogą niszczyć informacje, nie ma skrótu). gen tworzy nowe zmienne; replace zmienia wartości istniejących zmiennych. Ich podstawowa składnia jest identyczna:
zmienna gen = wyrażenie
lub
zastąp zmienną = wyrażenie
gdzie zmienna jest nazwą zmiennej, którą chcesz utworzyć lub zmienić, a wyrażenie jest wyrażeniem matematycznym, którego wynik chcesz w nim umieścić. Wyrażenia mogą być tak proste jak pojedyncza liczba lub obejmować różnego rodzaju skomplikowane funkcje. Możesz sprawdzić, jakie funkcje są dostępne, wpisując funkcje pomocy. Jeśli wyrażenie zależy od brakującej wartości w dowolnym punkcie, wynik jest brakujący. Zazwyczaj jest to dokładnie to, czego można się spodziewać i chcesz.
szczególnie ważne jest używanie plików do podczas zmiany danych, więc zacznij od utworzenia pliku do, który ładuje zestaw danych auto:
rejestr przechwytywania Zamknij dziennik
używając vars.log, replace
Wyczyść wszystko
sysuse auto
ceny w zestawie danych auto są w dolarach 1978, więc przydatne może być przeliczenie ich na dolary 2020. Aby to zrobić, należy pomnożyć ceny przez współczynnik konwersji, którym jest wskaźnik cen towarów i usług konsumpcyjnych w 2020 r.podzielony przez wskaźnik cen towarów i usług konsumpcyjnych w 1978 r., czyli około 4. Kod będzie:
Gen price2020 = cena*4
Dodaj tę linię do swojego pliku do, uruchom go i sprawdź wyniki za pomocą:
przeglądaj make price price2020
ceny są nadal ogólnie niższe niż można zobaczyć w salonie samochodowym, ale prawdopodobnie dlatego, że dzisiejsze samochody są znacznie ładniejsze niż samochody z 1978 roku. Jest to dobry przykład, jak sprawdzić swoją pracę: porównaj to, co masz do tego, czego się spodziewałeś, a jeśli nie pasują, upewnij się, że wiesz dlaczego!
wewnętrznie, Stata wykonała pętlę: obliczył cenę*4 dla pierwszej obserwacji i zapisał wynik w cenie 2020 dla pierwszej obserwacji, następnie obliczył cenę*4 dla drugiej obserwacji i zapisał wynik w cenie 2020 dla drugiej obserwacji, i tak dalej dla wszystkich obserwacji w zbiorze danych. Dowiesz się, jak rozciągnąć ten paradygmat jednej obserwacji na raz w Sprzeczaniu się Danych W Stata, ale zadania, które go łamią (takie jak obliczanie środków) wymagają innego podejścia, o którym wkrótce porozmawiamy.
Załóżmy, że chcemy być trochę bardziej precyzyjni i użyć 4.14 jako współczynnika konwersji. Możesz pokusić się o dodanie kodu, który „naprawia” zmienną price2020 (powiedzmy pomnożenie jej przez 4.14/4). Ale to jest prostsze i czystsze, aby naprawić kod, który go stworzył w pierwszej kolejności. Zmień:
Gen price2020 = cena*4
na:
Gen price2020 = Cena*4.14
i uruchom ponownie plik do. Ponieważ plik do ładuje oryginalne dane z dysku za każdym razem, gdy jest uruchamiany, może po prostu utworzyć zmienną price2020 tak, jak powinna być.
mając zarówno cenę, jak i cenę 2020, można porównać ich wartości i sprawdzić swoją pracę. Ale jeśli chcesz pracować tylko z dolarami 2020 i masz pewność, że masz właściwą formułę, możesz użyć polecenia Zamień, aby zmienić istniejącą zmienną cenową zamiast tworzyć nową:
replace price = price*4.14
uruchom tę wersję, a otrzymasz wiadomość (74 prawdziwe zmiany). Biorąc pod uwagę, że zbiór danych ma 74 obserwacje, to mówi ci, że wszystkie z nich zostały zmienione, jak można się spodziewać. Kiedy zaczniesz włączać warunki, ile obserwacji zostało faktycznie zmienionych, może być bardzo przydatną informacją.
ćwiczenia: Poza Stanami Zjednoczonymi efektywność paliwowa jest często mierzona w litrach na kilometr (należy pamiętać, że ponieważ używane paliwo znajduje się w liczniku, niska liczba jest dobra). Aby przeliczyć mile na galon na litry na kilometr, pomnóż odwrotność mpg (1/mpg) przez 2,35. Stwórz zmienną, która przechowuje zużycie paliwa każdego samochodu w litrach na kilometr.
Tworzenie zmiennych z warunkami If
przejdź do treści poniższego filmu
Jeśli polecenie gen ma warunek if, wynikowa zmienna będzie (I musi) nadal istnieć dla wszystkich obserwacji. Jednak zostanie przypisana brakująca wartość dla obserwacji, w których warunek if nie jest true. Jeśli polecenie replace ma warunek if, obserwacje, w których warunek if nie jest true, pozostaną niezmienione. Pozwala to na ustawienie zmiennych na różne wartości dla różnych obserwacji.
Załóżmy, że chcesz zwinąć pięciopunktową skalę zmiennej rep78 na skalę trzypunktową. Dodaj następujący kod do pliku do, aby to zrobić:
gen rep3 = 1 jeśli rep78<3
wymień rep3 = 2 jeśli rep78==3
wymień rep3 = 3 Jeśli rep78>& rep78<.
pierwsza linia tworzy nową zmienną rep3, ale ustawia ją tylko na jedną dla przypadków, w których rep78 jest mniejsze niż trzy. Inni znikają. Druga linia zmienia niektóre z tych braków na dwójki, a trzecia zmienia więcej na trójki. Uruchom plik do, zanotuj liczbę obserwacji zmienionych przez każdą linię i porównaj ją z całkowitą liczbą obserwacji w zbiorze danych.
jaka będzie wartość rep3 dla obserwacji, w których brakuje rep78? Zaginiony, tak jak powinien, bo nigdy nie był ustawiony na nic innego. Pięć obserwacji, w których brakuje rep78, zostało domyślnie lub wyraźnie wykluczonych ze wszystkich trzech poleceń, więc zaczynały się od brakującej wartości dla rep3 i nigdy nie zostały zmienione. (Jeśli zapomnisz wykluczyć brakujące wartości z ostatniego polecenia, wtedy rep3 będzie trzy dla samochodów, w których brakuje rep78, co jest zbyt częstym błędem. Pamiętajcie, brak jest nieskończonością.)
ćwiczenia: Łączenie jedynek i dwójek ma sens, ponieważ jest ich tak mało, ale nie było szczególnej potrzeby łączenia czwórek i piątek. Utwórz zmienną rep4, która łączy jedynki i Dwójki i odpowiednio zmienia numerację pozostałych kategorii (np. rep4 powinien przejść z jednego do czterech).
Recode
przejdź do treści po tym filmie
polecenie recode daje alternatywny sposób tworzenia rep3. Jest przeznaczony wyłącznie do zadań rekodowania i jest znacznie mniej elastyczny niż gen I replace. Ale jest bardzo łatwy w użyciu. Składnia jest:
recode var (reguła 1) (reguła 2) (więcej reguł w razie potrzeby…), gen(newvar)
opcja gen na końcu nie jest wymagana—jeśli jej tam nie ma, to oryginalna zmienna zostanie zmieniona, zamiast tworzyć nową zmienną z nowymi wartościami. Możesz również wykonać rekodowanie listy zmiennych, rekodując je wszystkie w ten sam sposób.
rdzeń polecenia recode jest listą reguł, każda w nawiasach, które mówią jej, jak zmienna ma zostać przekodowana. Przyjmują one postać (inputValue = outputValue). Wartość wejściowa może być pojedynczą liczbą, listą liczb oddzielonych spacjami lub zakresem liczb określonym przez start/end. OutputValue zawsze będzie pojedynczą liczbą. Wszystko, co nie jest objęte regułą, pozostaje bez zmian, więc możesz użyć recode, aby zmienić tylko kilka wartości zmiennej lub całkowicie ją przedefiniować, tak jak my tutaj. Oto wersja rekodowania konwersji rep78 do skali trzypunktowej:
recode rep78 (1 2 = 1) (3 = 2) (4 5 = 3), gen (rep3b)
brakujące wartości nie wymaga specjalnej obsługi: ponieważ brakujący nie został wymieniony w wartościach wejściowych żadnej reguły, obserwacje z brakującymi wartościami nie są zmieniane.
ćwiczenie: Utwórz rep4b, łącząc tylko jedynki i dwójki jak wyżej, używając recode.
zmienne wskaźnika
przejdź do treści poniżej tego filmu
tworząc zmienne wskaźnika możesz skorzystać z faktu, że stata traktuje true jako jeden, a false jako zero, ustawiając nową zmienną równą warunkowi. Rozważ:
gen lowMPG = (mpg<20)
(nawiasy są opcjonalne, ale ułatwiają czytanie.) Tworzy zmienną wskaźnikową o nazwie lowMPG, która jest jedna (prawda) dla samochodów, w których mpg jest mniejsze niż dwadzieścia i zero (fałsz), w których MPG jest większe lub równe dwadzieścia. Aby zobaczyć wyniki, uruchom plik do, a następnie wpisz browse make MPG if lowMPG.
żaden samochód nie ma brakującej wartości dla mpg, ale gdyby tak było, powyższy kod przypisałby mu zero dla lowMPG, jakby wiedział, że ma dobry przebieg gazu. W takich przypadkach powinna brakować zmiennej lowMPG, co można zrobić za pomocą:
gen lowMPG = (mpg<20) jeśli MPG<.
ćwiczenia: Stwórz zmienną wskaźnikową, która identyfikuje samochody z dobrą rejestracją napraw (zdefiniowaną jako rep78 większą niż 3). Jak zmieniłby się Twój kod, gdyby zmienna wskaźnikowa była potrzebna do identyfikacji samochodów, o których wiadomo, że mają dobrą dokumentację napraw?
zmienne łańcuchowe
przejdź do treści poniższego filmu
polecenia gen I replace działają również ze zmiennymi łańcuchowymi. Wyrażenia po prawej stronie znaku równości nie są matematyczne, ale stosują podobne zasady. Wartości ciągów zawsze są w cudzysłowie, więc jeśli chcesz zapisać literę x w zmiennej o nazwie x, powiesz gen x = „x”. Stata nie uznałoby tego za mylące (chociaż możesz), ponieważ x w cudzysłowach („x”) oznacza literę x, A x bez cudzysłowów oznacza zmienną x.
dodawanie łańcuchów jest definiowane jako umieszczanie jednego łańcucha po drugim, więc „abc” + „def” = „abcdef”. Ale większość pracy z ciągami jest wykonywana przez specjalne funkcje, które przyjmują ciągi jako wejście (albo wartości ciągów, albo zmienne zawierające ciągi) i zwracają ciągi jako wyjście.
zmienna Marka tak naprawdę zapisuje dwie Informacje: nazwę firmy, która wyprodukowała samochód, oraz nazwę modelu samochodu. Możesz łatwo wyodrębnić nazwę firmy za pomocą funkcji word ():
gen company = word(make,1)
aby zobaczyć wyniki, uruchom plik do i wpisz browse make company. Pierwszym wejściem lub argumentem funkcji word () jest łańcuch znaków, na którym ma działać (w tym przypadku zmienna zawierająca ciągi znaków). Drugi to liczba mówiąca, które słowo chcesz. Funkcja rozbija łańcuch wejściowy na słowa na podstawie zawartych w nim spacji i zwraca ten, o który prosiłeś, w tym przypadku pierwszy.
dużo więcej o funkcjach łańcuchowych powiemy w danych tekstowych (wkrótce), ale jeśli chcesz zacząć, możesz zrobić wiele z następującymi funkcjami:
word() | wyodrębnia słowo z łańcucha |
strpos() | mówi, czy łańcuch zawiera inny łańcuch, a jeśli tak, jego pozycja |
substr() | wyodrębnia części łańcucha |
subinstr() | zastępuje część łańcucha czymś innym |
długość() | informuje, jak długi jest łańcuch (ile zawiera znaków) |
wpisz help, a następnie nazwę funkcji w główne okno Stata, aby dowiedzieć się, jak to działa.
ćwiczenie: Utwórz zmienną model zawierającą nazwę modelu samochodu (czyli resztę marki). Twój kod musi obsługiwać nazwy modeli, które mają długość jednego lub dwóch słów.
Konwersja zmiennych łańcuchowych na zmienne Numeryczne
przejdź do treści poniższego filmu
czasami zmienna, która powinna być numeryczna, jest wprowadzana do Stata jako łańcuch. Możesz to naprawić za pomocą polecenia destring, które konwertuje zmienną łańcuchową zawierającą liczby na zmienną numeryczną. Składnia jest po prostu destring variable, replace, gdzie zmienna powinna być zastąpiona nazwą zmiennej (lub zmiennych), która ma być destringowana. Jeśli zmienna łańcuchowa zawiera coś poza liczbami, możesz dodać opcję force, aby kazać Stata ją przekonwertować, ale obserwacje z dowolnymi nieliczbowymi znakami otrzymają brakującą wartość. Zauważ, że „znaki nienumeryczne” zawierają znaki dolara i przecinki!
ogólnie rzecz biorąc, jeśli musisz użyć opcji force, to dlatego, że Stata nie jest pewien, co robisz, jest dobrym pomysłem i powinieneś dokładnie się zastanowić przed zrobieniem tego. W tym przypadku powinieneś sprawdzić znaki nienumeryczne, aby sprawdzić, czy byłoby sens je najpierw usunąć (jak te znaki dolara i przecinki) lub czy zmienna nie jest tak naprawdę tylko liczbami.
Ten zestaw danych nie ma żadnych zmiennych, które muszą być destringowane, więc zróbmy jedną:
gen x = „5”
zauważ, jak cudzysłowy wokół „5” oznaczają, że x jest zmienną łańcuchową zawierającą znak 5, a nie zmienną numeryczną zawierającą wartość 5. Aby wszystko skomplikować, zmieńmy niektóre wartości X na rzeczywisty tekst:
replace x = „missing” jeśli obce
teraz spróbuj destring x:
destring x, replace
Stata odmówi, ponieważ niektóre wartości X nie mogą być zamienione na liczby. Ale wartości, których nie można przekonwertować, są „brakujące”, więc całkowicie właściwe jest przekonwertowanie ich na brakujące wartości. Więc spróbuj ponownie z opcją force:
destring x, replace force
teraz Stata skonwertuje X na zmienną numeryczną, z niektórymi brakującymi wartościami.
Egen
przejdź do treści poniższego filmu
polecenie egen, skrót od „extended generate” daje dostęp do innej biblioteki funkcji. Trochę to trochę dziwne, ale z funkcji egen będziesz korzystał najczęściej obliczając statystyki sumaryczne:
Name | Description |
---|---|
min() | Minimum value |
max() | Maximum value |
mean() | Mean |
median() | Median |
sd() | Standard Deviation |
total() | Total |
These are examples of aggregate functions: they take multiple numbers as input and return a single number as output. Działają one również w różnych obserwacjach, a zatem nie mogą być łatwo wykonane za pomocą gen, ponieważ działa jedna obserwacja na raz. Składnia wygląda prawie identycznie jak w gen:
egen variable = function ()
duża różnica w egen polega na tym, że nie piszesz własnego wyrażenia matematycznego; po prostu używasz funkcji z biblioteki. Na przykład, jeśli chcesz ustawić zmienną średnią podzieloną przez dwa, nie możesz powiedzieć egen y = średnia(x) / 2. Zamiast tego najpierw uruchom egen y = mean (x), a następnie zastąp y = y/2.
inną ważną różnicą jest sposób obsługi brakujących wartości. Przypomnij sobie, że w przypadku gen, jeśli brakowało jakiejkolwiek części wejścia, wyjście byłoby brakujące. Jednak egen po prostu ignoruje brakujące wartości i oblicza wynik na podstawie dostępnych danych. Zazwyczaj tego właśnie chcesz, ale musisz mieć świadomość tego, co robi egen i mieć pewność, że ma to sens dla konkretnego zadania.
funkcje egen do obliczania statystyk sumarycznych są bardzo często łączone z by do obliczania statystyk sumarycznych dla grup. Oblicz średnią cenę samochodu dla każdej firmy, a następnie zobacz wyniki za pomocą:
bysort company: egen meanPrice = mean(price)
zakładka company, sum(meanPrice)
Przypomnijmy, że bysort company: najpierw sortuje dane według firmy, a następnie uruchamia następujące polecenie egen oddzielnie dla każdej firmy.
zera dla odchylenia standardowego odzwierciedlają fakt, że każdy samochód produkowany przez tę samą firmę ma taką samą wartość średniej ceny. To dlatego, że wredna cena opisuje firmę, a nie Samochód. W rzeczywistości jest to definicja zmiennej, która opisuje grupę: każda jednostka w tej samej grupie musi mieć taką samą wartość zmiennej.
gdybyśmy chcieli tylko zobaczyć średnią wartość ceny dla każdej firmy, moglibyśmy po prostu uruchomić:
tab company, sum(price)
ale po uruchomieniu egen mamy teraz średnią w zmiennej, dostępnej do użycia.
ćwiczenie: Utwórz zmienną zawierającą średnią wartość rep78 dla każdej firmy. Następnie zbadaj częstotliwości rep78 w każdej firmie, tworząc dwukierunkową tabelę z tab. Pamiętaj, aby uwzględnić brakujące wartości. Lincoln i Olds mają te same średnie; jak myślisz, jak dobrze podsumowuje to dystrybucję rep78 dla obu firm? Następnie rozważ brakujące wartości: Załóżmy, że ujawniono rzeczywistą wartość rep78 dla samochodów z brakującymi wałami. Czym muszą być, aby te środki się nie zmieniły? Czy to możliwe?
etykiety
przejdź do treści poniższego filmu
dobre etykiety znacznie ułatwiają zrozumienie i pracę z danymi. Chociaż Stata ma wiele rodzajów etykiet, skupimy się na najbardziej popularnych i najbardziej użytecznych: etykietach zmiennych i etykietach wartości.
etykiety zmiennych
etykiety zmiennych przekazują informacje o zmiennej i mogą być substytutem długich nazw zmiennych. Ten zestaw danych ma już dobry zestaw etykiet zmiennych, co widać w oknie zmienne. Jedyną, która jest myląca, jest etykieta na obcym, więc zmień ją za pomocą komendy zmiennej label. Składnia do ustawienia zmiennej label to:
label variablename „label”
wpisz więc:
label variable foreign „Car Origin”
spójrz ponownie na okno zmiennych, aby zobaczyć wyniki.
Etykiety wartości
etykiety wartości są używane ze zmiennymi kategorycznymi, aby powiedzieć, co oznaczają kategorie. Widzieliśmy jeden w akcji z obcą zmienną: to właśnie etykiety wartości mówiły nam, że 0 oznacza „Krajowy”, a 1 oznacza ” zagraniczny.”
zbadajmy etykiety wartości, oznaczając wartości rep3, nowej zmiennej, którą przekodowaliśmy, aby zwinąć rep78 ze skali pięciopunktowej na skalę trzypunktową. Etykiety wartości są mapowaniem ze zbioru liczb całkowitych do zbioru opisów tekstowych, więc pierwszym krokiem jest zdefiniowanie mapy. Aby to zrobić, użyj polecenia label define:
label define mapname value1 „label1” value2 „label2″…
:
label define replabel 1″ Bad „2” Average „3”Good”
tworzy to mapowanie o nazwie replabel, ale nie stosuje się go do niczego. Zanim zrobi coś użytecznego, musisz powiedzieć Stata, aby oznaczała wartości zmiennej rep za pomocą zdefiniowanego mapowania replabel. Składnia jest następująca:
label values variable map
i tak:
label values rep3 replabel
aby zobaczyć wyniki, Uruchom:
List make rep3
Po zdefiniowaniu mapy możesz zastosować ją do dowolnej liczby zmiennych: wystarczy zastąpić pojedynczą zmienną w powyższym poleceniu label values listą zmiennych. Załóżmy, że pracujesz z danymi ankietowymi, a twoje zmienne obejmują płeć respondenta, płeć małżonka respondenta i płeć wszystkich dzieci respondenta. Można zdefiniować tylko jedną mapę o nazwie płeć i użyć jej do oznaczenia wartości wszystkich zmiennych płci.
trzy polecenia do zarządzania etykietami wartości: label dir wyświetla listę wszystkich zdefiniowanych etykiet, a label list mówi, co one oznaczają. Polecenie describe podaje nazwy etykiet wartości powiązanych z każdą zmienną (wśród wielu innych przydatnych rzeczy).
ćwiczenia: Utwórz etykiety wartości dla rep4 i zastosuj je. Możesz zdecydować, jak opisać poziomy.
etykiety za pomocą Recode
gdy użyjesz recode do utworzenia nowej zmiennej, Stata automatycznie utworzy dla niej Etykietę zmiennej („RECODE of …”). Można również zdefiniować dla niego etykiety wartości, umieszczając żądaną etykietę dla każdej wartości na końcu reguły, która ją definiuje. Utwórz kolejną wersję rep3, tym razem z etykietami od samego jej utworzenia, z:
recode rep78 (1 2 = 1 „Zły”) (3 = 2 „Średni”) (4 5 = 3 „Dobry”), Gen (rep3c)
ćwiczenie: Utwórz rep4c za pomocą recode, ustawiając dla niego etykiety wartości.
ten plik do zmienia zestaw danych, którego używa, więc powinien zapisać nową wersję. Pamiętaj, nigdy nie zapisuj danych wyjściowych nad danymi wejściowymi, więc nie zapisuj nowych danych jako auto. Jeśli tak, nie możesz ponownie uruchomić tego pliku do: zawiesiłby się, gdy próbował utworzyć price2020, ponieważ ta zmienna istniałaby już w zmodyfikowanym zbiorze danych. Zamiast tego Zapisz dane jako autoV2, jak w ” wersji 2 zestawu danych samochodowych.”
Zapisz autoV2, zamień
na koniec zamknij dziennik:
Zaloguj Zamknij
to prowadzi nas do końca wprowadzenia do Stata. Mamy nadzieję, że to było pomocne dla Ciebie. Aby dowiedzieć się więcej, rozważ czytanie Wranglingu danych w Stata lub innej zawartości bazy wiedzy o obliczeniach statystycznych SSCC.
Ostatnia aktualizacja: 27.05.2020