This is part six of Introduction to Stata. Jos olet uusi Stata suosittelemme aloittaa alusta.
Siirry tämän videon jälkeiseen sisältöön
tässä artikkelissa opetetaan uusien muuttujien tekemisen, olemassa olevien muuttujien muokkaamisen ja tarrojen luomisen perusteet.
luo ja korvaa
ensisijaiset komennot muuttujien luomiseen ja muuttamiseen ovat generate (yleensä lyhennetään gen) ja replace (joista, kuten muista tietoja tuhoavista komennoista, ei ole lyhennettä). gen luo uusia muuttujia; korvaa muuttaa olemassa olevien muuttujien arvoja. Niiden syntaksi on identtinen:
gen variable = lauseke
tai
korvaa muuttuja = lauseke
missä muuttuja on sen muuttujan nimi, jonka haluat luoda tai muuttaa, ja lauseke on se matemaattinen lauseke, jonka tuloksen haluat siihen laittaa. Lausekkeet voivat olla niinkin yksinkertaisia kuin yksittäinen numero tai niihin voi liittyä kaikenlaisia monimutkaisia funktioita. Voit tutkia, mitä toimintoja on saatavilla kirjoittamalla ohjetoimintoja. Jos lauseke riippuu puuttuvasta arvosta missä tahansa pisteessä, tulos puuttuu. Yleensä tämä on juuri sitä, mitä odottaa ja haluaa.
on erityisen tärkeää käyttää do-tiedostoja, kun muutat tietojasi, joten aloita luomalla do-tiedosto, joka lataa automaattisen datajoukon:
capture log close
log vars-ohjelmalla.log, replace
clear all
sysuse auto
autotiedoston hinnat ovat vuoden 1978 dollareissa, joten ne voisi olla hyödyllistä muuntaa 2020 dollareiksi. Tätä varten hinnat on kerrottava muuntokertoimella, joka on vuoden 2020 kuluttajahintaindeksi jaettuna vuoden 1978 kuluttajahintaindeksillä eli noin 4. Koodi on:
Gene price2020 = price*4
Lisää tämä rivi do-tiedostoosi, suorita se ja tutki tuloksia:
Selaa make price price2020
hinnat ovat edelleen yleisesti alhaisemmat kuin mitä autokaupassa näkisi, mutta se johtunee siitä, että nykyautot ovat paljon hienompia kuin vuoden 1978 autot. Tämä on hyvä esimerkki siitä, miten tarkistaa työsi: vertaa mitä sait mitä odotit, ja jos ne eivät täsmää varmista, että tiedät miksi!
sisäisesti Stata suoritti silmukan: se laski ensimmäisen havainnon hinnan*4 ja tallensi ensimmäisen havainnon tuloksen price2020, laski toisen havainnon hinnan*4 ja tallensi toisen havainnon tuloksen price2020 ja niin edelleen kaikkien tietoaineistossa olevien havaintojen osalta. Opit venyttämään tätä yhden havainnon paradigmaa Data Wranglingissa Statassa, mutta tehtävät, jotka rikkovat sen (kuten laskennan keinot) edellyttävät erilaista lähestymistapaa, josta puhumme pian.
Oletetaan, että halusimme olla hieman tarkempia ja käyttää muuntokertoimena 4,14: ää. Saatat olla kiusaus yrittää lisätä koodia, joka ”korjaa” price2020 muuttuja (sano kertomalla se 4.14/4). Mutta sen luoneen koodin korjaaminen on yksinkertaisempaa ja puhtaampaa. Muutos:
gen price2020 = price*4
to:
gen price2020 = price*4,14
ja suorita do-tiedosto uudelleen. Koska do-tiedostosi Lataa alkuperäiset tiedot levyltä aina, kun se suoritetaan, se voi yksinkertaisesti luoda price2020 muuttujan niin kuin sen pitäisi olla.
sekä hinta että hinta2020 antoivat mahdollisuuden vertailla niiden arvoja ja tarkistaa työnsä. Mutta jos haluat työskennellä vain 2020 dollarilla ja olet varma, että olet saanut kaavan oikein, voit käyttää replace-komentoa muuttaaksesi olemassa olevaa hintamuuttujaa uuden luomisen sijaan:
replace price = price*4.14
suorita tämä versio ja saat viestin (74 todellista muutosta tehty). Koska tietoaineistossa on 74 havaintoa, tämä kertoo, että ne kaikki on muutettu, kuten odottaa saattaa. Kun aloitat sisällyttää jos olosuhteet, kuinka monta havaintoja todella muuttunut voi olla erittäin hyödyllistä tietoa.
liikunta: Yhdysvaltain ulkopuolella polttoainetehokkuus mitataan usein litroina kilometriä kohti (huomaa, että koska käytetty polttoaine on osoittimessa, pieni luku on hyvä). Jos haluat muuntaa mailia gallonaa kohti litraksi kilometriä kohti, kerro mpg: n käänteisarvo (1/mpg) 2,35: llä. Luo muuttuja, joka tallentaa kunkin auton polttoainetehokkuuden litroina kilometriä kohti.
muuttujien luominen If-ehdoilla
Siirry tämän videon jälkeiseen sisältöön
Jos gen-komennolla on if-ehto, tuloksena oleva muuttuja on (ja sen on oltava) edelleen olemassa kaikille havainnoille. Sille annetaan kuitenkin puuttuva arvo havainnoille, jos if-ehto ei pidä paikkaansa. Jos replace-komennolla on if-ehto, havainnot, joissa if-ehto ei ole tosi, jätetään muuttumattomiksi. Näin voit asettaa muuttujia eri arvoille eri havainnoille.
Oletetaan, että haluat romahduttaa rep78-muuttujan viisipisteasteikon kolmipisteasteikoksi. Lisää seuraava koodi do-tiedostoosi tehdäksesi niin:
gen rep3 = 1 if rep78<3
replace rep3 = 2 if rep78==3
replace rep3 = 3 if rep78>& rep78<.
ensimmäinen rivi luo uuden muuttujan rep3, mutta asettaa sen vain yhteen tapauksissa, joissa rep78 on pienempi kuin kolme. Muut katoavat. Toinen rivi muuttaa osan niistä huteja kakkosiksi, ja kolmas muuttaa enemmän niitä kolmosiksi. Suorita do-tiedosto, huomaa havaintojen määrä, joka on muuttunut kullakin rivillä, ja vertaa sitä havaintojen kokonaismäärään tietojoukossa.
mikä on rep3: n arvo havainnoille, joissa rep78 puuttuu? Kateissa, kuten pitääkin, koska sitä ei ollut asetettu mihinkään muuhun. Viisi havaintoa, joissa rep78 puuttuu, jätettiin implisiittisesti tai eksplisiittisesti pois kaikista kolmesta käskystä, joten ne alkoivat rep3: n puuttuvalla arvolla, eikä niitä koskaan muutettu. (Jos unohdit jättää puuttuvat arvot pois viimeisestä komennosta, rep3 olisi kolme niille autoille, joista rep78 puuttuu, aivan liian yleinen virhe. Muista, että puuttuminen on pohjimmiltaan ääretön.)
liikunta: Ykkösten ja kakkosten yhdistäminen on järkevää, koska niitä on niin vähän, mutta nelosten ja vitosten yhdistämiseen ei ollut erityistä tarvetta. Luo rep4-muuttuja, joka yhdistää ykköset ja kakkoset ja numeroi muut luokat uudelleen vastaavasti (eli rep4: n pitäisi siirtyä yhdestä neljään).
Recode
Skip to the content following this video
recode-komento antaa vaihtoehtoisen tavan luoda rep3. Se on suunniteltu yksinomaan recoding tehtäviä ja on paljon vähemmän joustava kuin gen ja korvata. Mutta se on erittäin helppokäyttöinen. Syntaksi on:
recode var (sääntö 1) (sääntö 2) (Lisää sääntöjä tarpeen mukaan…), gen (newvar)
lopussa olevaa gen—vaihtoehtoa ei tarvita-jos sitä ei ole, alkuperäistä muuttujaa muutetaan sen sijaan, että luodaan uusi muuttuja uusilla arvoilla. Voit myös recode työtä muuttujien luettelo, recoding ne kaikki samalla tavalla.
recode-käskyn ydin on sulkeissa oleva sääntöluettelo, joka kertoo sille, miten muuttuja on koodattava uudelleen. Ne ovat muotoa (inputValue = outputValue). InputValue voi olla yksittäinen numero, välilyönneillä erotettu numeroluettelo tai alku/loppu-numeroilla määritelty joukko. OutputValue on aina yksi numero. Kaikki, mitä sääntö ei kata, jätetään ennalleen, joten voit käyttää recodea muuttujan muutamien arvojen muuttamiseen tai määritellä sen kokonaan uudelleen, kuten täällä tehdään. Tässä recode-versio rep78: n muuntamisesta kolmen pisteen asteikolle:
recode rep78 (1 2 = 1) (3 = 2) (4 5 = 3), gen (rep3b)
puuttuvat arvot eivät vaadi erityistä käsittelyä: koska puuttuvaa ei ole mainittu minkään säännön syöttöarvoissa, puuttuvat arvot sisältävät havainnot eivät muutu.
harjoitus: luo rep4b, yhdistämällä vain ykköset ja kakkoset kuten yllä, käyttäen recodea.
Indikaattorimuuttujat
Skip to the content following this video
luodessasi indikaattorimuuttujia voit hyödyntää sitä, että Stata käsittelee tosi yhtenä ja epätosi nollana asettamalla uuden muuttujan ehdoksi. Mieti:
gen lowMPG = (mpg<20)
(sulut ovat valinnaisia, mutta helpottavat lukemista.) Tämä luo indikaattorimuuttujan nimeltä lowMPG, joka on yksi (true) autoille, joissa mpg on alle kaksikymmentä ja nolla (false), jossa mpg on suurempi tai yhtä suuri kuin kaksikymmentä. Nähdäksesi tulokset suorita do-tiedosto ja kirjoita sitten browse make mpg if lowMPG.
yhdelläkään autolla ei ole mpg: lle puuttuvaa arvoa, mutta jos sellainen olisi, edellä mainittu koodi osoittaisi sille nollan lowMPG: lle ikään kuin sillä tiedettäisiin olevan hyvä bensamittari. LowMPG-muuttujan pitäisi puuttua tällaisissa tapauksissa, minkä voi tehdä:
gen lowMPG = (mpg<20) jos mpg<.
liikunta: Luo indikaattori muuttuja, joka tunnistaa autoja hyvä korjaus kirjaa (määritelty rep78 suurempi kuin 3). Miten koodi muuttuisi, jos osoitinmuuttuja tarvitaan tunnistamaan autoja, joiden tiedetään olevan hyvä korjaus kirjaa?
Merkkijonomuuttujat
Skip to the content following this video
gen ja replace-komennot toimivat myös merkkijonomuuttujien kanssa. Yhtäsuuruusmerkin oikealla puolella olevat lausekkeet eivät ole matemaattisia, mutta ne noudattavat samanlaisia sääntöjä. Merkkijonojen arvot menevät aina lainausmerkeissä, joten jos haluat tallentaa X-kirjaimen muuttujaan nimeltä x, sanoisit gen x = ”x”. Stata ei pidä tätä hämmentävänä (vaikka saattaisikin), koska X lainausmerkeissä (”x”) tarkoittaa kirjainta x ja x ilman lainausmerkeissä muuttujaa x.
lisäys merkkijonoille määritellään siten, että laitetaan yksi merkkijono toisensa perään, joten ”abc” + ”def” = ”abcdef”. Suurin osa merkkijonojen kanssa tehtävästä työstä tehdään kuitenkin erikoistarkoitusfunktioilla, jotka ottavat merkkijonoja syötteenä (joko merkkijonojen arvot tai merkkijonoja sisältävät muuttujat) ja palauttavat merkkijonoja ulostulona.
make-muuttuja kertoo oikeastaan kaksi tietoa: auton valmistaneen yrityksen nimen ja automallin nimen. Voit helposti purkaa yrityksen nimen word () – funktiolla:
gen company = word (make,1)
nähdäksesi tulokset, suorita do-tiedosto ja kirjoita browse make company. Ensimmäinen tulo eli argumentti word () – funktiolle on merkkijono, jolla toimitaan (tässä tapauksessa merkkijonoja sisältävä muuttuja). Toinen on numero, joka kertoo, minkä sanan haluat. Funktio pilkkoo syöttömerkkijonon sanoiksi sisältämiensä välilyöntien perusteella ja palauttaa pyytämäsi merkkijonon, tässä tapauksessa ensimmäisen.
tulemme sanomaan paljon enemmän merkkijonofunktioista Tekstidatassa (tulossa), mutta jos olet innokas aloittamaan, voit tehdä paljon vain seuraavilla funktioilla:
sana() | poimii sanan merkkijonosta |
strpos() | kertoo, Jos merkkijono sisältää toisen merkkijonon, ja jos näin on, sen sijainti | substr () | poimii merkkijonon osia |
aliasennus () | korvaa osan merkkijonosta jollain muulla |
pituus () | kertoo, kuinka pitkä merkkijono on (kuinka monta merkkiä se sisältää) |
kirjoita ohje ja sitten funktion nimi tärkein Stata ikkuna oppia, miten se toimii.
harjoitus: luo mallimuuttuja, joka sisältää automallin nimen (eli loput merkistä). Koodisi täytyy pystyä käsittelemään mallinimiä, jotka ovat joko yhden tai kahden sanan mittaisia.
Merkkijonomuuttujien muuntaminen Numeerisiksi muuttujiksi
Hyppää sisältöön tämän videon jälkeen
joskus muuttuja, jonka pitäisi olla numeerinen, syötetään stataan merkkijonona. Voit korjata sen destring-komennolla, joka muuntaa numeroita sisältävän merkkijonomuuttujan numeeriseksi muuttujaksi. Syntaksi on vain destring muuttuja, korvata, jossa muuttuja olisi korvattava nimi muuttujan (tai muuttujien) on destringed. Jos merkkijonomuuttuja sisältää kaikkea muuta kuin numeroita, voit lisätä voima-vaihtoehdon käske Statan muuntaa se joka tapauksessa, mutta havainnot millä tahansa ei-numeerisella merkillä saavat puuttuvan arvon. Huomaa, että” ei-numeeriset merkit ” sisältävät dollarimerkkejä ja pilkkuja!
ylipäätään voimavaihtoehdon käyttäminen johtuu siitä, että Stata ei ole varma, onko tekemisesi hyvä idea, ja kannattaa miettiä tarkkaan ennen kuin tekee sen. Tässä tapauksessa sinun pitäisi tutkia ei-numeerisia merkkejä nähdäksesi, olisiko järkevää poistaa ne ensin (kuten ne dollarimerkit ja pilkut) tai jos muuttuja ei ole oikeastaan vain numeroita loppujen lopuksi.
tässä tietojoukossa ei ole muuttujia, joita tarvitsisi destringoida, joten tehdään sellainen:
gen x = ”5”
huomaa, miten ”5”: n ympärillä olevat lainausmerkit tarkoittavat, että x on merkkijonomuuttuja, joka sisältää merkin 5, ei numeerinen muuttuja, joka sisältää arvon 5. Vain tehdä asioita monimutkaisia, Let ’ s muuttaa joitakin arvoja x varsinaiseen tekstiin:
korvaa x = ”puuttuu” jos vieras
nyt yrittää destring x:
destring x, korvaa
Stata kieltäytyy, koska osaa X: n arvoista ei voi muuttaa numeroiksi. Mutta arvot, joita ei voida muuntaa ovat ”puuttuu”, joten se on täysin asianmukaista muuntaa ne puuttuvat arvot. Yritä siis uudestaan voima-valinnalla:
destring x, korvaa voima
nyt Stata muuntaa x: n numeeriseksi muuttujaksi, josta puuttuu joitakin arvoja.
Egen
Skip to the content following this video
egen-komento, lyhenne sanoista ”extended generate”, antaa sinulle pääsyn toiseen funktiokirjastoon. Se on hieman hodge-podge, mutta egen toiminnot käytät eniten laskea Yhteenveto tilastot:
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. Ne toimivat myös havaintojen yli, eikä niitä siten voi helposti tehdä gen: llä, koska se toimii havainto kerrallaan. Syntaksi näyttää lähes identtiseltä gen:
egen variable = function ()
suuri ero egeniin on se, että et kirjoita omaa matemaattista lauseketta, vaan käytät vain kirjastosta löytyvää funktiota. Esimerkiksi, jos piti asettaa muuttuja keskiarvoon jaettuna kahdella, ei voinut sanoa egen y = keskiarvo (x) / 2. Sen sijaan ensin ajetaan egen y = mean (x) ja sitten korvataan y = y/2.
toinen tärkeä ero on se, miten puuttuvat arvot käsitellään. Muista, että Gen, jos jokin osa input puuttui tuotos olisi puuttuu. Egen kuitenkin yksinkertaisesti sivuuttaa puuttuvat arvot ja laskee tuloksen käytettävissä olevien tietojen perusteella. Yleensä tämä on mitä haluat, mutta sinun täytyy olla tietoinen siitä, mitä egen tekee ja olla varma, että se on järkevää juuri Sinun tehtäväsi.
yhteenvetotilastojen laskemiseen käytettäviä egen-funktioita yhdistetään hyvin yleisesti by: n kanssa ryhmien yhteenvetotilastojen laskemiseksi. Laske kunkin yrityksen keskihinta ja katso tulokset:
bysort company: egen meanPrice = mean(price)
tab company, sum (meanPrice)
muista, että bysort company: lajittelee tiedot ensin yrityskohtaisesti ja suorittaa sitten seuraavan egen-komennon erikseen jokaiselle yritykselle.
keskihajonnan nollat kertovat siitä, että jokaisen saman yhtiön valmistaman auton keskihinta on sama. Se johtuu siitä, että meanhinta kuvaa firmaa, ei autoa. Itse asiassa se on muuttujan määritelmä, joka kuvaa ryhmää: jokaisella saman ryhmän yksiköllä on oltava sama muuttujan arvo.
Jos olisimme vain halunneet nähdä kunkin yrityksen hinnan keskiarvon, olisimme voineet vain juosta:
tab company, summa(hinta)
, mutta ajettuamme egen meillä on nyt keskiarvo muuttuvassa, käytettävissä.
harjoitus: luodaan muuttuja, joka sisältää rep78: n keskiarvon kullekin yritykselle. Tutki sitten rep78: n taajuudet kunkin yrityksen sisällä luomalla kaksisuuntainen taulukko, jossa on välilehti. Muista sisällyttää puuttuvat arvot. Lincolnilla ja Oldsilla on sama keskiarvo; kuinka hyvin tämä mielestäsi tiivistää rep78: n jakautumisen näille kahdelle yritykselle? Harkitse seuraavaksi puuttuvia arvoja: oletetaan rep78: n todellinen arvo autoille, joiden vales puuttuu. Mitä niiden pitäisi olla, jotta nämä keinot eivät muuttuisi? Kuinka uskottavaa se on?
Tarrat
Skip to the content following this video
Hyvät tarrat helpottavat tietojesi ymmärtämistä ja työstämistä. Vaikka Statalla on monenlaisia etikettejä, keskitymme yleisimpiin ja hyödyllisimpiin: muuttuviin etiketteihin ja arvomerkintöihin.
muuttujat
muuttujat välittävät tietoa muuttujasta, ja ne voivat korvata pitkiä muuttujan nimiä. Tämä tietojoukko on jo hyvä joukko muuttuvia nimikkeitä, kuten näet muuttujat-ikkunassa. Ainoa, joka hämmentää, on merkki ulkomaisella, joten vaihda se label-muuttujan komennolla. Syntaksi muuttuvan merkin asettamiseksi on:
label variable variableName ”label”
So type:
label variable foreign ”Car Origin”
Katso muuttujien ikkunaa uudelleen nähdäksesi tulokset.
Arvomerkinnöissä
arvomerkinnöissä käytetään kategorisia muuttujia kertomaan, mitä Kategoriat tarkoittavat. Olemme nähneet yhden toiminnassa vieraan muuttujan kanssa.: arvomerkinnät kertoivat, että 0 tarkoittaa kotimaista ja 1 ulkomaista.”
tutkitaan arvomerkintöjä merkitsemällä rep3: n, uuden muuttujan, arvot uudelleenkoodasimme romahduttamaan rep78: n viiden pisteen asteikolta kolmen pisteen asteikolle. Arvomerkit ovat kartoitus kokonaislukujen joukosta tekstikuvausten joukkoon, joten ensimmäinen vaihe on kartan määrittely. Voit tehdä niin käyttämällä label define-komentoa:
label define mapName value1 ”label1” value2 ”label2″…
näin:
label määrittele replabel 1 ”Bad” 2 ”Average” 3 ”Good”
Tämä luo replabeliksi kutsutun kartoituksen, mutta ei sovella sitä mihinkään. Ennen kuin se tekee mitään hyödyllistä, sinun täytyy käskeä Stataa merkitsemään REP-muuttujan arvot juuri määrittelemäsi replabel-kartoituksen avulla. Syntaksi on:
label values variable map
ja näin:
label values rep3 replabel
nähdäksesi tulokset, suorita:
list make rep3
kun Kartta on määritelty, voit soveltaa sitä mihin tahansa muuttujiin: korvaa yllä olevassa label values-komennossa oleva yksittäinen muuttuja muuttujaluettelolla. Oletetaan, että työskentelet tutkimusaineiston kanssa ja muuttujia ovat vastaajan sukupuoli, vastaajan puolison sukupuoli ja kaikkien vastaajan lasten sukupuolet. Voisit määritellä vain yhden kartan nimeltä sukupuoli ja merkitä sen avulla kaikkien sukupuolimuuttujien arvot.
kolme komentoa arvomerkkien hallintaan: label dir antaa listan kaikista määritellyistä tarroista, ja tarralista kertoo, mitä ne tarkoittavat. Describe-komento kertoo kuhunkin muuttujaan liittyvien arvomerkkien nimen (monien muiden hyödyllisten asioiden joukossa).
liikunta: Luo arvomerkit rep4: lle ja käytä niitä. Voit vapaasti päättää, miten kuvata tasot.
Labels via Recode
Kun käytät recodea uuden muuttujan luomiseen, Stata luo sille automaattisesti muuttujan tarran (”RECODE of …”). Sille voi myös määritellä arvomerkinnät laittamalla jokaiselle arvolle halutun merkinnän sen määrittelevän säännön loppuun. Luo rep3: sta vielä toinen versio, tällä kertaa tarroilla heti sen luomisesta lähtien, jossa:
recode rep78 (1 2 = 1 ”Huono”) (3 = 2 ”Keskimääräinen”) (4 5 = 3 ”Hyvä”), gen (rep3c)
Exercise: Luo rep4c käyttäen recode, jossa arvo tarrat sitä.
tämä do-tiedosto muuttaa käyttämäänsä tietojoukkoa, joten sen pitäisi tallentaa uusi versio. Muista, älä koskaan Tallenna lähtö yli syötteen, joten älä tallenna uusia tietoja auto. Jos teit, et voinut ajaa tätä do-tiedostoa uudelleen: se kaatuu, kun se yritti luoda price2020, koska kyseinen muuttuja olisi jo olemassa muutetussa datajoukossa. Sen sijaan, tallentaa tiedot autoV2, kuten ” Versio 2 auto data set.”
Tallenna autoV2, korvaa
lopuksi sulje loki:
log close
tästä päästään Statan johdannon loppuun. Toivottavasti siitä on ollut apua. Lisätietoja, harkitse lukeminen Data Wrangling Stata, tai muut sisällöt SSCC: n tilastollinen Computing tietopohja.
Viimeksi tarkistettu: 5/27/2020