Introduktion til Stata: oprettelse og ændring af variabler

Dette er del seks af introduktion til Stata. Hvis du er ny i Stata, anbefaler vi stærkt at starte fra begyndelsen.

gå til indholdet efter denne video

Denne artikel lærer dig det grundlæggende ved at oprette nye variabler, ændre eksisterende variabler og oprette etiketter.

Generer og erstat

de primære kommandoer til oprettelse og ændring af variabler er generer (normalt forkortet gen) og erstat (som ligesom andre kommandoer, der kan ødelægge information, ikke har nogen forkortelse). gen opretter nye variabler; erstat ændrer værdierne for eksisterende variabler. Deres kernesyntaks er identisk:

gen variabel = udtryk

eller

erstat variabel = udtryk

hvor variabel er navnet på den variabel, du vil oprette eller ændre, og udtryk er det matematiske udtryk, hvis resultat du vil sætte i det. Udtryk kan være så enkle som et enkelt tal eller involvere alle mulige komplicerede funktioner. Du kan undersøge, hvilke funktioner der er tilgængelige ved at skrive hjælpefunktioner. Hvis udtrykket på et hvilket som helst tidspunkt afhænger af en manglende værdi, mangler resultatet. Normalt er det præcis, hvad du ville forvente og ønsker.

det er især vigtigt at bruge do-filer, når du ændrer dine data, så start med at oprette en DO-fil, der indlæser det automatiske datasæt:

capture log luk
log ved hjælp af vars.log, erstat
Ryd alle
sysuse auto

priserne i auto datasættet er i 1978 dollars, så det kan være nyttigt at konvertere dem til 2020 dollars. For at gøre det skal du multiplicere priserne med en konverteringsfaktor, som er forbrugerprisindekset i 2020 divideret med forbrugerprisindekset i 1978, eller omkring 4. Koden vil være:

gen price2020 = pris * 4

Føj denne linje til din do-fil, kør den og undersøg resultaterne med:

gennemse lav pris price2020

priserne er stadig generelt lavere, end du ville se hos en bilforhandler, men det er sandsynligvis fordi dagens biler er meget pænere end 1978 biler. Dette er et godt eksempel på, hvordan du kontrollerer dit arbejde: sammenlign, hvad du fik, med det, du forventede, og hvis de ikke stemmer overens, skal du sørge for at vide hvorfor!

internt udførte Stata en løkke: den beregnede pris * 4 for den første observation og lagrede resultatet i pris2020 for den første observation, derefter beregnet pris*4 for den anden observation og lagrede resultatet i pris2020 for den anden observation osv.for alle observationer i datasættet. Du lærer at strække dette one-observation-at-a-time paradigme i Datakrig i Stata, men opgaver, der bryder det (som beregningsmidler) kræver en anden tilgang, som vi snart vil tale om.

Antag, at vi ønskede at være lidt mere præcise og bruge 4.14 som konverteringsfaktor. Du kan blive fristet til at prøve at tilføje kode, der “løser” price2020-variablen (f.eks. Men det er enklere og renere at rette koden, der skabte den i første omgang. Ændring:

gen price2020 = pris * 4

til:

gen price2020 = pris*4.14

og kør do-filen igen. Fordi din DO-fil indlæser de originale data fra disken, hver gang den køres, kan den simpelthen oprette price2020-variablen, som den skal være.

at have både pris og pris2020 tillod dig at sammenligne deres værdier og kontrollere dit arbejde. Men hvis du kun vil arbejde med 2020-dollars og er sikker på, at du har formlen rigtigt, kan du bruge kommandoen erstat til at ændre den eksisterende prisvariabel i stedet for at oprette en ny:

erstat pris = pris*4.14

Kør denne version, så får du beskeden (74 reelle ændringer foretaget). Da datasættet har 74 observationer, fortæller Dette dig, at alle blev ændret, som du ville forvente. Når du begynder at inkludere if-betingelser, hvor mange observationer der faktisk blev ændret, kan være meget nyttige oplysninger.

øvelse: Uden for USA måles brændstofeffektivitet ofte i liter pr.kilometer (bemærk, at fordi det anvendte brændstof er i tælleren, er et lavt antal godt). For at konvertere miles per gallon til liter per kilometer skal du multiplicere det gensidige af mpg (1 / mpg) med 2,35. Opret en variabel, der lagrer brændstofeffektiviteten for hver bil i liter pr.

oprettelse af variabler med If-betingelser

Spring til indholdet efter denne video

Hvis en gen-kommando har en if-betingelse, vil den resulterende variabel (og skal) stadig eksistere for alle observationer. Det vil dog blive tildelt en manglende værdi for observationer, hvor if-betingelsen ikke er sand. Hvis en erstat-kommando har en if-betingelse, forbliver observationer, hvor if-betingelsen ikke er sand, uændrede. Dette giver dig mulighed for at indstille variabler til forskellige værdier for forskellige observationer.

Antag, at du ønskede at kollapse fempunktsskalaen for rep78-variablen i en trepunktsskala. Føj følgende kode til din do-fil for at gøre det:

gen rep3 = 1 if rep78<3
erstat rep3 = 2 If rep78==3
erstat rep3 = 3 If rep78>& rep78<.

den første linje opretter den nye variabel rep3, men indstiller den kun til en i tilfælde, hvor rep78 er mindre end tre. De andre forsvinder. Den anden linje ændrer nogle af disse mangler til to, og den tredje ændrer flere af dem til tre. Kør do-filen, Bemærk antallet af observationer ændret af hver linje, og sammenlign det med det samlede antal observationer i datasættet.

hvad vil værdien af rep3 være for observationer, hvor rep78 mangler? Mangler, som det burde være, fordi det aldrig var sat til noget andet. De fem observationer, hvor rep78 mangler, blev implicit eller eksplicit udelukket fra alle tre kommandoer, så de startede med en manglende værdi for rep3 og blev aldrig ændret. (Hvis du har glemt at udelukke manglende værdier fra den sidste kommando, ville rep3 være tre for biler, hvor rep78 mangler, en alt for almindelig fejl. Husk, manglende er i det væsentlige uendelig.)

øvelse: At kombinere dem og to giver mening, fordi der er så få af dem, men der var ikke noget særligt behov for at kombinere fours og fives. Opret en rep4-variabel, der kombinerer dem og to og omnummerer de andre kategorier i overensstemmelse hermed (dvs.rep4 skal gå fra en til fire).

Recode

gå til indholdet efter denne video

kommandoen recode giver dig en alternativ måde at oprette rep3 på. Det er udelukkende designet til omkodning af opgaver og er meget mindre fleksibelt end gen and replace. Men det er meget nemt at bruge. Syntaksen er:

recode var (regel 1) (Regel 2) (flere regler efter behov…gen—indstillingen i slutningen er ikke påkrævet-hvis den ikke er der, ændres den oprindelige variabel i stedet for at oprette en ny variabel med de nye værdier. Du kan også få recode arbejde på en liste over variabler, omkodning dem alle på samme måde.

kernen i kommandoen recode er en liste over regler, hver i parentes, der fortæller den, hvordan en variabel skal omkodes. De tager formularen (inputValue = outputValue). Inputværdien kan være et enkelt tal, en liste over tal adskilt af mellemrum eller en række tal, der er angivet med start/slut. Outputværdien vil altid være et enkelt nummer. Alt, der ikke er omfattet af en regel, forbliver uændret, så du kan bruge recode til at ændre nogle få værdier af en variabel eller omdefinere den helt som vi gør her. Her er en recode version af konvertering rep78 til en tre-punkts skala:

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

manglende værdier kræves ingen særlig håndtering: da manglende ikke blev opført i inputværdierne for nogen regel, ændres observationer med manglende værdier ikke.

øvelse: Opret rep4b, der kun kombinerer dem og to som ovenfor ved hjælp af recode.

Indikatorvariabler

gå til indholdet efter denne video

Ved oprettelse af indikatorvariabler kan du drage fordel af det faktum, at Stata behandler sandt som en og falsk som nul ved at indstille den nye variabel lig med en betingelse. Overvej:

gen lavmpg = (mpg<20)

(parenteserne er valgfri, men gør det lettere at læse.) Dette skaber en indikatorvariabel kaldet lavmpg, som er en (sand) for biler, hvor mpg er mindre end tyve og nul (falsk), hvor mpg er større end eller lig med tyve. For at se resultaterne køre do-fil og derefter skrive gennemse gøre mpg hvis lavmpg.

ingen bil har en manglende værdi for mpg, men hvis man gjorde det, ville ovenstående kode tildele det et nul for lavmpg, som om det var kendt at have god gas kilometertal. Variablen med lavmpg skulle mangle i sådanne tilfælde, som du kan gøre med:

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

øvelse: Opret en indikatorvariabel, der identificerer biler med gode reparationsregistre (defineret som rep78 større end 3). Hvordan ville din kode ændre sig, hvis indikatorvariablen var nødvendig for at identificere biler, der vides at have gode reparationsregistre?

Strengvariabler

gå til indholdet efter denne video

gen-og udskiftningskommandoerne fungerer også med strengvariabler. Udtrykkene på højre side af ligetegnet er ikke matematiske, men de følger lignende regler. Strengværdier går altid i anførselstegn, så hvis du vil gemme bogstavet H i en variabel kaldet H, vil du sige gen h = “h”.

tilføjelse til strenge er defineret som at sætte en streng efter den anden, så “abc” + “def” = “abcdef”. Men det meste arbejde med strenge udføres af specialfunktioner, der tager strenge som input (enten strengværdier eller variabler, der indeholder strenge) og returnerer strenge som output.

make-variablen registrerer virkelig to oplysninger: navnet på det firma, der producerede bilen, og navnet på bilmodellen. Du kan nemt udtrække firmanavnet ved hjælp af funktionen ord ():

gen company = ord (make,1)

for at se resultaterne skal du køre do-filen og skrive gennemse make company. Det første input eller argument for ordet() funktion er strengen til at handle på (i dette tilfælde en variabel indeholdende strenge). Det andet er et tal, der fortæller det, hvilket ord du vil have. Funktionen bryder inputstrengen i ord baseret på de mellemrum, den indeholder, og returnerer den, du bad om, i dette tilfælde den første.

Vi siger meget mere om strengfunktioner i tekstdata (kommende), men hvis du er ivrig efter at komme i gang, kan du gøre meget med bare følgende funktioner:

ord() udtrækker et ord fra en streng
strpos() fortæller dig, om en streng indeholder en anden streng, og i så fald dens position
SUBSTR() udtrækker dele af en streng
subinstr() erstatter en del af en streng med noget andet
længde() fortæller dig, hvor lang en streng er (hvor mange tegn den indeholder)

skriv hjælp og derefter navnet på en funktion i vigtigste Stata vindue for at lære, hvordan det virker.

øvelse: Opret en modelvariabel, der indeholder navnet på bilmodellen (dvs.resten af mærket). Din kode skal kunne håndtere modelnavne, der enten er et eller to ord lange.

konvertering af Strengvariabler til numeriske variabler

Spring til indholdet efter denne video

Nogle gange indtastes en variabel, der skal være numerisk, i Stata som en streng. Du kan rette det med kommandoen destring, som konverterer en strengvariabel, der indeholder tal til en numerisk variabel. Syntaksen er bare destruerende variabel, erstat, hvor variabel skal erstattes af navnet på den variabel (eller variabler), der skal destrueres. Hvis strengvariablen indeholder alt andet end tal, kan du tilføje kraftindstillingen for at fortælle Stata at konvertere den alligevel, men observationer med ikke-numeriske tegn får en manglende værdi. Bemærk, at “ikke-numeriske tegn” omfatter dollartegn og kommaer!

generelt, hvis du skal bruge force-indstillingen, er det fordi Stata ikke er sikker på, hvad du laver, er en god ide, og du bør tænke grundigt, før du gør det. I dette tilfælde bør du undersøge de ikke-numeriske tegn for at se, om det ville være fornuftigt at fjerne dem først (som disse dollartegn og kommaer), eller hvis variablen ikke er rigtig bare tal.

dette datasæt har ingen variabler, der skal destrueres, så lad os lave en:

gen = “5”

bemærk, hvordan citaterne omkring “5” betyder, at h er en strengvariabel, der indeholder tegnet 5, ikke en numerisk variabel, der indeholder værdien 5. Bare for at gøre tingene komplicerede, lad os ændre nogle af værdierne for:

erstat = “mangler” hvis udenlandsk

prøv nu at ødelægge:

destring, erstat

Stata vil nægte, fordi nogle af værdierne af H ikke kan konverteres til tal. Men de værdier, der ikke kan konverteres, er “manglende”, så det er helt hensigtsmæssigt at konvertere dem til manglende værdier. Så prøv igen med kraftindstillingen:

destruktion, erstat kraft

nu konverterer Stata til en numerisk variabel med nogle manglende værdier.

Egen

gå til indholdet efter denne video

egen-kommandoen, forkortelse for “udvidet generer” giver dig adgang til et andet bibliotek med funktioner. Det er lidt af en hodge-podge, men egen-funktionerne bruger du mest beregne oversigtsstatistik:

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 arbejder også på tværs af observationer, og kan derfor ikke nemt gøres ved hjælp af gen, da det virker en observation ad gangen. Syntaksen ser næsten identisk ud til gen:

egen variabel = funktion()

den store forskel med egen er, at du ikke skriver dit eget matematiske udtryk; du bruger bare en funktion fra biblioteket. For eksempel, hvis du havde brug for at indstille en variabel til et gennemsnit divideret med to, Kunne du ikke sige egen y = middel(H)/2. Du vil i stedet først køre egen y = middel (h) og derefter erstatte y = y/2.

en anden vigtig forskel er, hvordan manglende værdier håndteres. Husk at med gen, hvis nogen del af input manglede, ville output mangle. Egen ignorerer dog simpelthen manglende værdier og beregner resultatet ved hjælp af de tilgængelige data. Normalt er det, hvad du vil, men du skal være opmærksom på, hvad egen gør, og være sikker på, at det giver mening for din særlige opgave.

egen-funktionerne til beregning af sammenfattende statistik kombineres meget ofte med by for at beregne sammenfattende statistik for grupper. Beregn den gennemsnitlige bilpris for hvert firma, og se derefter resultaterne med:

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

Husk at bysort company: sorterer først dataene efter firma og kører derefter følgende egen-kommando separat for hvert firma.

nullerne for standardafvigelse afspejler det faktum, at hver bil produceret af det samme firma har samme værdi af middelpris. Det skyldes, at meanPrice beskriver virksomheden, ikke bilen. Faktisk er det definitionen af en variabel, der beskriver en gruppe: hver enhed inden for samme gruppe skal have samme værdi af variablen.

Hvis vi kun havde ønsket at se middelværdien af prisen for hvert firma, kunne vi bare have kørt:

tab company, sum(pris)

men efter at have kørt egen har vi nu gennemsnittet i en variabel, der er tilgængelig til brug.

øvelse: Opret en variabel, der indeholder middelværdien af rep78 for hvert firma. Undersøg derefter frekvenserne af rep78 inden for hvert firma ved at oprette en tovejs tabel med tab. Sørg for at medtage manglende værdier. Lincoln og Olds har samme middelværdi; hvor godt tror du, at dette opsummerer fordelingen af rep78 for de to virksomheder? Næste overvej de manglende værdier: Antag, at den faktiske værdi af rep78 for bilerne med manglende vales blev afsløret. Hvad skal de være for at disse midler ikke skal ændre sig? Hvor plausibelt er det?

etiketter

gå til indholdet efter denne video

Gode etiketter gør dine data meget lettere at forstå og arbejde med. Mens Stata har mange slags etiketter, fokuserer vi på de mest almindelige og mest nyttige: variable etiketter og værdietiketter.

Variable Labels

Variable labels formidler information om en variabel og kan erstatte lange variable navne. Dette datasæt har allerede et godt sæt variable etiketter, som du kan se i vinduet variabler. Den eneste, der er forvirrende, er etiketten på fremmed, så skift den ved hjælp af kommandoen label variabel. Syntaksen for at indstille en variabel etiket er:

label variabel variableName”label “

så skriv:

label variabel udenlandsk”bil oprindelse”

se på vinduet variabler igen for at se resultaterne.

Værdietiketter

Værdietiketter bruges med kategoriske variabler til at fortælle dig, hvad kategorierne betyder. Vi har set en i aktion med den udenlandske variabel: det var værdimærkerne, der fortalte os, at en 0 betyder “indenlandsk” og en 1 betyder “fremmed.”

lad os undersøge værdietiketter ved at mærke værdierne for rep3, den nye variabel, vi omkodede for at kollapse rep78 fra en fem-punkts skala til en trepunkts skala. Værdietiketter er en kortlægning fra et sæt heltal til et sæt tekstbeskrivelser, så det første trin er at definere kortet. For at gøre det skal du bruge kommandoen label Definer:

label Definer mapname value1 “label1” value2 “label2″…

således:

label Definer replabel 1″ dårlig “2” Gennemsnit “3”God”

dette opretter en kortlægning kaldet replabel, men anvender den ikke på noget. Før det gør noget nyttigt, skal du fortælle Stata at mærke værdierne for rep-variablen ved hjælp af den replabel-kortlægning, du lige har defineret. Syntaksen er:

etiketværdier variabel kort

og dermed:

etiketværdier rep3 replabel

for at se resultaterne skal du køre:

list make rep3

Når et kort er defineret, kan du anvende det på et hvilket som helst antal variabler: udskift bare den enkelte variabel i kommandoen etiketværdier ovenfor med en liste over variabler. Antag, at du arbejder med undersøgelsesdata, og dine variabler inkluderer respondentens køn, køn på respondentens ægtefælle og køn for alle respondentens børn. Du kan definere kun et kort kaldet køn og derefter bruge det til at mærke værdierne for alle kønsvariabler.

tre kommandoer til styring af værdietiketter: label dir giver dig en liste over alle de definerede etiketter, og label list fortæller dig, hvad de betyder. Kommandoen beskriv fortæller dig navnet på de værdietiketter, der er knyttet til hver variabel (blandt mange andre nyttige ting).

øvelse: Opret værdi etiketter til rep4 og anvende dem. Du er velkommen til at beslutte, hvordan du beskriver niveauerne.

etiketter via Recode

Når du bruger recode til at oprette en ny variabel, opretter Stata automatisk en variabel etiket til den (“RECODE of …”). Du kan også definere værdietiketter for den ved at placere den ønskede etiket for hver værdi i slutningen af den regel, der definerer den. Opret endnu en version af rep3, denne gang med etiketter lige fra oprettelsen, med:

recode rep78 (1 2 = 1 “dårlig”) (3 = 2 “gennemsnit”) (4 5 = 3 “God”), gen(rep3c)

øvelse: Opret en rep4c ved hjælp af recode, indstilling værdi etiketter for det.

denne do-fil ændrer det datasæt, den bruger, så den skal gemme den nye version. Husk, gem aldrig dit output over dit input, så gem ikke de nye data som auto. Hvis du gjorde det, kunne du ikke køre denne do-fil igen: den ville gå ned, da den forsøgte at oprette price2020, fordi denne variabel allerede ville eksistere i det ændrede datasæt. Gem i stedet dataene som autoV2, som i ” version 2 af bildatasættet.”

Gem autoV2, erstat

luk endelig loggen:

log luk

dette bringer os til slutningen af introduktionen til Stata. Vi håber, det har været nyttigt for dig. Hvis du vil vide mere, overveje at læse Data tovtrækkeri i Stata, eller det andet indhold af SSCC statistiske Computing videnbase.

senest revideret: 5/27/2020

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.