Introduksjon Til Stata: Opprette Og Endre Variabler

Dette er del seks Av Introduksjon Til Stata. Hvis Du er ny På Stata, anbefaler vi at du starter fra begynnelsen.

Hopp til innholdet etter denne videoen

denne artikkelen vil lære deg grunnleggende om å lage nye variabler, endre eksisterende variabler og lage etiketter.

Generer og Erstatt

de primære kommandoene for å opprette og endre variabler er generer (vanligvis forkortet gen) og replace (som, som andre kommandoer som kan ødelegge informasjon, ikke har noen forkortelse). gen oppretter nye variabler; erstatt endrer verdiene til eksisterende variabler. Deres kjernesyntaks er identisk:

gen variabel = uttrykk

eller

erstatt variabel = uttrykk

hvor variabel er navnet på variabelen du vil opprette eller endre, og uttrykk er det matematiske uttrykket hvis resultat du vil sette inn i det. Uttrykk kan være så enkelt som et enkelt tall eller involvere alle slags kompliserte funksjoner. Du kan utforske hvilke funksjoner som er tilgjengelige ved å skrive hjelpefunksjoner. Hvis uttrykket avhenger av en manglende verdi på noe punkt, mangler resultatet. Vanligvis er dette akkurat hva du forventer og ønsker.

det er spesielt viktig å bruke do-filer når du endrer dataene dine, så start med å opprette en do-fil som laster automatisk datasett:

capture log lukk
logg ved hjelp av vars.sysuse auto

prisene i auto datasettet er i 1978 dollar, så det kan være nyttig å konvertere dem til 2020 dollar. For å gjøre dette må du multiplisere prisene med En konverteringsfaktor som Er Konsumprisindeksen i 2020 dividert Med Konsumprisindeksen i 1978, eller ca 4. Koden vil være:

gen price2020 = pris * 4

Legg denne linjen til do-filen din, kjør den og undersøk resultatene med:

bla gjennom make price price2020

prisene er fortsatt generelt lavere enn du ville se på en bilforretning, men det er sannsynligvis fordi dagens biler er mye bedre enn 1978 biler. Dette er et godt eksempel på hvordan du sjekker arbeidet ditt: sammenlign hva du har til det du forventet, og hvis de ikke samsvarer, sørg for at du vet hvorfor!

Internt utførte Stata en sløyfe: den beregnet pris*4 for den første observasjonen og lagret resultatet i pris2020 for den første observasjonen, deretter beregnet pris*4 for den andre observasjonen og lagret resultatet i pris2020 for den andre observasjonen, og så videre for alle observasjonene i datasettet. Du lærer å strekke dette enobservasjonsparadigmet i Data Wrangling I Stata, men oppgaver som bryter det (som beregningsmidler) krever en annen tilnærming som vi snakker om snart.

Anta at vi ønsket å være litt mer presis og bruke 4.14 som konverteringsfaktor. Du kan bli fristet til å prøve å legge til kode som «fikser» price2020-variabelen (si, multipliser den med 4,14/4). Men det er enklere og renere å fikse koden som opprettet den i utgangspunktet. Endre:

gen price2020 = pris * 4

til:

gen price2020 = pris * 4.14

og kjør do-filen på nytt. Fordi do-filen laster de opprinnelige dataene fra disken hver gang den kjøres, kan den bare lage price2020-variabelen slik den skal være.

Å Ha både pris og pris2020 tillot deg å sammenligne sine verdier og sjekke arbeidet ditt. Men hvis du bare vil jobbe med 2020-dollar og er sikker på at du har formelen riktig, kan du bruke erstatt-kommandoen til å endre den eksisterende prisvariabelen i stedet for å opprette en ny:

erstatt pris = pris*4.14

Kjør denne versjonen, Og du får meldingen (74 virkelige endringer gjort). Gitt at datasettet har 74 observasjoner, forteller dette deg at alle ble endret, som du forventer. Når du begynner å inkludere hvis forholdene, hvor mange observasjoner ble faktisk endret kan være svært nyttig informasjon.

Trening: Utenfor Usa måles drivstoffeffektiviteten ofte i liter per kilometer (merk at fordi drivstoffet som brukes er i telleren, er et lavt tall bra). For å konvertere miles per gallon til liter per kilometer, multipliser gjensidig av mpg (1/mpg) med 2,35. Lag en variabel som lagrer drivstoffeffektiviteten til hver bil i liter per kilometer.

Opprette Variabler Med If-Betingelser

Hopp til innholdet etter denne videoen

Hvis en gen-kommando har en if-betingelse, vil den resulterende variabelen (og må) fortsatt eksistere for alle observasjoner. Men det vil bli tildelt en manglende verdi for observasjoner der hvis betingelsen ikke er sant. Hvis en erstatt-kommando har en hvis-betingelse, vil observasjoner der hvis-betingelsen ikke er sann, bli uendret. Dette lar deg sette variabler til forskjellige verdier for ulike observasjoner.

Anta at du ønsket å kollapse fempunkts skalaen til rep78-variabelen i en trepunkts skala. Legg til følgende kode i do-filen for å gjøre det:

gen rep3 = 1 hvis rep78<3
erstatt rep3 = 2 hvis rep78==3
erstatt rep3 = 3 hvis rep78>& rep78<.

den første linjen oppretter den nye variabelen rep3, men setter den bare til en for tilfeller der rep78 er mindre enn tre. De andre blir savnet. Den andre linjen endrer noen av disse missene til to, og den tredje endrer flere av dem til tre. Kjør do-filen, noter antall observasjoner endret av hver linje, og sammenlign det med totalt antall observasjoner i datasettet.

Hva vil verdien av rep3 være for observasjoner der rep78 mangler? Mangler, som det burde være, fordi det aldri ble satt til noe annet. De fem observasjonene der rep78 mangler ble implisitt eller eksplisitt ekskludert fra alle tre kommandoene, så de startet med en manglende verdi for rep3 og ble aldri endret. (Hvis du glemte å ekskludere manglende verdier fra den siste kommandoen, ville rep3 være tre for biler der rep78 mangler, en altfor vanlig feil. Husk, mangler er i hovedsak uendelig.)

Trening: Kombinere de og to er fornuftig fordi det er så få av dem, men det var ikke noe spesielt behov for å kombinere fours og fives. Opprett en rep4-variabel som kombinerer de og to og omnummererer de andre kategoriene tilsvarende (dvs. rep4 skal gå fra en til fire).

Recode

Hopp til innholdet etter denne videoen

kommandoen recode gir deg en alternativ måte å lage rep3 på. Den er designet utelukkende for omkoding av oppgaver og er mye mindre fleksibel enn gen og replace. Men det er veldig enkelt å bruke. Syntaksen er:

recode var (regel 1) (regel 2) (flere regler etter behov…), gen(newvar)

gen—alternativet på slutten er ikke nødvendig-hvis det ikke er der, vil den opprinnelige variabelen bli endret i stedet for å skape en ny variabel med de nye verdiene. Du kan også ha recode arbeid på en liste over variabler, omkoding dem alle på samme måte.

kjernen i recode-kommandoen er en liste over regler, hver i parentes, som forteller hvordan en variabel skal omkodes. De tar skjemaet (inputValue = outputValue). InputValue kan være et enkelt tall, en liste over tall atskilt med mellomrom, eller en rekke tall angitt med start / slutt. Utgangsverdien vil alltid være et enkelt nummer. Alt som ikke dekkes av en regel, blir uendret, så du kan bruke recode til å endre bare noen få verdier av en variabel eller helt omdefinere den som vi gjør her. Her er en recode versjon av konvertering rep78 til en trepunkts skala:

recode rep78 (1 2 = 1) (3 = 2) (4 5 = 3), gen (rep3b)

Manglende verdier kreves ingen spesiell håndtering: siden manglende ikke ble oppført i inngangsverdiene til noen regel, blir observasjoner med manglende verdier ikke endret.

Øvelse: Lag rep4b, kombinere bare de og to som ovenfor, ved hjelp av recode.

Indikatorvariabler

Hopp til innholdet etter denne videoen

i å lage indikatorvariabler kan du dra nytte av Det Faktum At Stata behandler sann som en og usann som null ved å sette den nye variabelen lik en tilstand. Tenk på:

gen lowMPG = (mpg<20)

(parentesene er valgfrie, men gjør det lettere å lese.) Dette skaper en indikatorvariabel kalt lowMPG som er en (sann) for biler der mpg er mindre enn tjue og null (falsk) der mpg er storre enn eller lik tjue. For å se resultatene kjør do-filen og skriv deretter bla gjennom mpg hvis lowMPG.Ingen bil har en manglende verdi for mpg, men hvis man gjorde det, ville koden ovenfor tildele den en null for lowMPG som om den var kjent for å ha god gass kjørelengde. LowMPG-variabelen skal mangle for slike tilfeller, som du kan gjøre med:

gen lowMPG = (mpg < 20) hvis mpg <.

Trening: Opprett en indikatorvariabel som identifiserer biler med gode reparasjonsposter (definert som rep78 større enn 3). Hvordan ville koden din endres hvis indikatorvariabelen trengte å identifisere biler som er kjent for å ha gode reparasjonsrekorder?

Strengvariabler

Hopp til innholdet etter denne videoen

gen og erstatt kommandoer fungerer også med strengvariabler. Uttrykkene på høyre side av likhetstegnet er ikke matematiske, men de følger lignende regler. Strengverdier går alltid i anførselstegn, så hvis du ønsket å lagre bokstaven x i en variabel kalt x, vil du si gen x = «x». Stata ville ikke finne dette forvirrende (selv om du kanskje) fordi x i anførselstegn («x») betyr bokstaven x og x uten anførselstegn betyr variabelen x.

Tillegg for strenger er definert som å sette en streng etter den andre, så «abc» + «def» = «abcdef». Men det meste arbeid med strenger er gjort av spesielle formål funksjoner som tar strenger som input (enten strengverdier eller variabler som inneholder strenger) og retur strenger som utgang.

make-variabelen registrerer virkelig to opplysninger: navnet på firmaet som produserte bilen, og navnet på bilmodellen. Du kan enkelt trekke ut firmanavnet ved hjelp av word () – funksjonen:

gen company = word (make,1)

for å se resultatene, kjør do-filen og skriv browse make company. Den første input, eller argument, for word () – funksjonen er strengen til å handle på (i dette tilfellet en variabel som inneholder strenger). Den andre er et tall som forteller det hvilket ord du vil ha. Funksjonen bryter inngangsstrengen inn i ord basert på mellomrom den inneholder, og returnerer den du ba om, i dette tilfellet den første.

vi sier mye mer om strengfunksjoner i Tekstdata (kommende), men hvis du er ivrig etter å komme i gang, kan du gjøre mye med bare følgende funksjoner:

strpos ()

lengde ()

word() Trekker ut et ord fra en streng
Forteller deg om en streng inneholder en annen streng, og hvis så sin posisjon
trekker ut deler av en streng
subinstr () erstatter en del av en streng med noe annet
forteller deg hvor lang en streng er (hvor mange tegn Den Inneholder)

skriv inn hjelp og deretter navnet på en funksjon i hoved Stata vindu for å lære hvordan det fungerer.

Øvelse: Lag en modellvariabel som inneholder navnet på bilmodellen(dvs. resten av merket). Koden din må kunne håndtere modellnavn som er ett eller to ord lange.

Konvertere Strengvariabler Til Numeriske Variabler

Hopp til innholdet etter denne videoen

noen ganger blir en variabel som skal være numerisk, lagt Inn I Stata som en streng. Du kan fikse det med destring-kommandoen, som konverterer en strengvariabel som inneholder tall til en numerisk variabel. Syntaksen er bare destring variabel, erstatt, hvor variabel skal erstattes av navnet på variabelen (eller variablene) som skal destringed. Hvis strengvariabelen inneholder alt annet enn tall, kan du legge til force-alternativet for å fortelle Stata å konvertere det uansett, men observasjoner med eventuelle ikke-numeriske tegn vil få en manglende verdi. Merk at «ikke-numeriske tegn» inkluderer dollartegn og komma! generelt, hvis Du må bruke force-alternativet, er Det Fordi Stata ikke er sikker på hva Du gjør, er en god ide, og du bør tenke nøye før du gjør det. I dette tilfellet bør du undersøke de ikke-numeriske tegnene for å se om det ville være fornuftig å fjerne dem først (som de dollartegn og komma) eller hvis variabelen ikke egentlig bare er tall.

dette datasettet har ingen variabler som må destringed, så la oss lage en:

gen x = » 5 »

Merk hvordan sitatene rundt «5» betyr at x er en strengvariabel som inneholder tegnet 5, ikke en numerisk variabel som inneholder verdien 5. Bare for å gjøre ting komplisert, la oss endre noen av verdiene til x til faktisk tekst:

erstatt x = «mangler» Hvis utenlandsk

nå prøver å destring x:

destring x, erstatt

Stata vil nekte, fordi noen av verdiene til x Ikke kan konverteres til tall. Men verdiene som ikke kan konverteres er «mangler», så det er helt riktig å konvertere dem til manglende verdier. Så prøv igjen med kraftalternativet: destring x, erstatt kraft

Nå Vil Stata konvertere x til en numerisk variabel, med noen manglende verdier.

Egen

Hopp til innholdet etter denne videoen

kommandoen egen, kort for «extended generer», gir deg tilgang til et annet bibliotek med funksjoner. Det er litt av en hodge-podge, men egen-funksjonene du vil bruke mest beregne sammendragsstatistikk:

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. De jobber også på tvers av observasjoner, og kan dermed ikke enkelt gjøres ved hjelp av gen siden det fungerer en observasjon om gangen. Syntaksen ser nesten identisk ut som gen:

egen variable = function()

den store forskjellen med egen er at du ikke skriver ditt eget matematiske uttrykk; du bruker bare en funksjon fra biblioteket. For eksempel, hvis du trengte å sette en variabel til et gjennomsnitt delt med to, kan du ikke si egen y = gjennomsnitt (x)/2. Du vil i stedet først kjøre egen y = mean (x) og deretter erstatte y = y / 2.

En annen viktig forskjell er hvordan manglende verdier håndteres. Husk at med gen, hvis noen del av inngangen manglet, ville utgangen mangle. Egen ignorerer imidlertid bare manglende verdier og beregner resultatet ved hjelp av dataene som er tilgjengelige. Vanligvis er dette det du vil, men du må være klar over hva egen gjør og være sikker på at det er fornuftig for din spesielle oppgave.

egen-funksjonene for beregning av sammendragsstatistikk er svært vanlig kombinert med by for å beregne sammendragsstatistikk for grupper. Beregn gjennomsnittlig bilpris for hvert selskap og se resultatene med:

bysort company: egen meanPrice = mean (price)
tab company, sum (meanPrice)

Recall that bysort company: først sorterer dataene etter selskap og kjører deretter følgende egen kommando separat for hvert selskap.

nullene for standardavvik gjenspeiler det faktum at hver bil produsert av samme selskap har samme verdi av meanPrice. Det er fordi meanPrice beskriver selskapet, ikke bilen. Faktisk er det definisjonen av en variabel som beskriver en gruppe: hver enhet i samme gruppe må ha samme verdi av variabelen.

Hvis vi bare hadde ønsket å se middelverdien av prisen for hvert selskap, kunne vi bare ha kjørt:

tab company, sum (price)

Men etter å ha kjørt egen har vi nå gjennomsnittet i en variabel, tilgjengelig for bruk.

Øvelse: Opprett en variabel som inneholder gjennomsnittsverdien av rep78 for hvert selskap. Undersøk deretter frekvensene til rep78 i hvert selskap ved å lage et toveisbord med fane. Pass på å inkludere manglende verdier. Lincoln og Olds har samme middel; hvor godt tror du dette oppsummerer fordelingen av rep78 for de to selskapene? Neste vurdere de manglende verdiene: anta at den faktiske verdien av rep78 for bilene med manglende vales ble avslørt. Hva må de være for at disse midlene ikke skal endres? Hvor plausibelt er det?

Etiketter

Hopp til innholdet etter denne videoen

Gode etiketter gjør dataene dine mye lettere å forstå og jobbe med. Mens Stata har mange typer etiketter, vil vi fokusere på de vanligste og mest nyttige: variable etiketter og verdietiketter.

Variable Etiketter

Variable etiketter formidler informasjon om en variabel, og kan erstatte lange variabelnavn. Dette datasettet har allerede et godt sett med variable etiketter, som du kan se i Variabels-vinduet. Den eneste som er forvirrende er etiketten på utenlandsk, så endre den ved hjelp av label variable-kommandoen. Syntaksen for å angi en variabel etikett er:

etikett variabel variableName «label»

Så skriv:

etikett variabel utenlandske «Bil Opprinnelse»

Se På Variablene vinduet igjen for å se resultatene.

Verdietiketter

Verdietiketter brukes med kategoriske variabler for å fortelle deg hva kategoriene betyr. Vi har sett en i aksjon med den utenlandske variabelen: det var verdien etiketter som fortalte oss at en 0 betyr » Innenlands «og en 1 betyr» Utenlandske.»

la oss utforske verdietiketter ved å merke verdiene til rep3, den nye variabelen vi omkodet for å kollapse rep78 fra en fempunkts skala til en trepunkts skala. Verdietiketter er en tilordning fra et sett med heltall til et sett med tekstbeskrivelser, så det første trinnet er å definere kartet. For å gjøre dette, bruk label define-kommandoen:

label define mapName value1 «label1» value2 «label2″…

Slik:

etikett definer replabel 1 «Dårlig» 2 «Gjennomsnittlig» 3 «Bra»

dette skaper en tilordning kalt replabel, men gjelder ikke for noe. Før det gjør noe nyttig, må Du fortelle Stata å merke verdiene til rep-variabelen ved hjelp av replabel-kartleggingen du nettopp har definert. Syntaksen er:

label values variable map

Og dermed:

label values rep3 replabel

for å se resultatene, kjør:

liste gjør rep3

når et kart er definert, kan du bruke det på et hvilket som helst antall variabler: bare erstatt enkeltvariabelen i label values-kommandoen ovenfor med en liste over variabler. Anta at du arbeider med undersøkelsesdata, og variablene dine inkluderer kjønnet til respondenten, kjønnet til respondentens ektefelle og kjønnene til alle respondentens barn. Du kan definere bare ett kart som heter kjønn og deretter bruke det til å merke verdiene til alle kjønnsvariablene.

Tre kommandoer for å administrere verdietiketter: label dir gir deg en liste over alle de definerte etikettene, og label list forteller deg hva de betyr. Kommandoen beskriv forteller deg navnet på verdietikettene som er knyttet til hver variabel (blant mange andre nyttige ting).

Trening: Lag verdietiketter for rep4 og bruk dem. Føl deg fri til å bestemme hvordan du skal beskrive nivåene.

Etiketter via Recode

Når du bruker recode til å opprette en ny variabel, Vil Stata automatisk opprette en variabel etikett for den («RECODE of …»). Du kan også definere verdietiketter for den ved å sette ønsket etikett for hver verdi på slutten av regelen som definerer den. Lag enda en versjon av rep3, denne gangen med etiketter rett fra opprettelsen, med:

recode rep78 (1 2 = 1 «Dårlig») (3 = 2 «Gjennomsnitt») (4 5 = 3 «Bra»), gen (rep3c)

Øvelse: Lag en rep4c bruker recode, sette verdi etiketter for det.

denne do-filen endrer datasettet den bruker, så den skal lagre den nye versjonen. Husk, aldri lagre utgang over innspill, så ikke lagre de nye dataene som auto. Hvis du gjorde det, kunne du ikke kjøre denne do-filen igjen: den ville krasje da den prøvde å skape price2020 fordi den variabelen allerede ville eksistere i det endrede datasettet. I stedet lagre dataene som autoV2, som i » versjon 2 av bildatasettet.»

lagre autoV2, erstatt

endelig lukk loggen:

logg lukk

dette bringer oss til Slutten Av Introduksjonen Til Stata. Vi håper det har vært nyttig for deg. For å lære mer, bør du vurdere å lese Data Wrangling I Stata, eller det andre innholdet I SSCCS Statistiske Datakunnskapsbase.

Sist Revidert: 5/27/2020

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.