Introducere în Stata: crearea și schimbarea variabilelor

aceasta este partea a șasea din Introducere în Stata. Dacă sunteți nou la Stata, vă recomandăm să începeți de la început.

treceți la conținutul care urmează acestui videoclip

Acest articol vă va învăța elementele de bază ale creării de noi variabile, modificarea variabilelor existente și crearea de etichete.

Generați și înlocuiți

comenzile primare pentru crearea și schimbarea variabilelor sunt generați (de obicei abreviat gen) și înlocuiți (care, ca și alte comenzi care pot distruge informațiile, nu are abreviere). gen creează noi variabile; înlocuiți modifică valorile variabilelor existente. Sintaxa lor de bază este identică:

gen variable = expression

sau

replace variable = expression

unde variabila este numele variabilei pe care doriți să o creați sau să o modificați, iar expresia este expresia matematică al cărei rezultat doriți să îl puneți în ea. Expresiile pot fi la fel de simple ca un singur număr sau pot implica tot felul de funcții complicate. Puteți explora ce funcții sunt disponibile tastând funcții de ajutor. Dacă expresia depinde de o valoare lipsă în orice moment, rezultatul lipsește. De obicei, acest lucru este exact ceea ce v-ați aștepta și doriți.

este deosebit de important să utilizați fișierele do atunci când modificați datele, deci începeți prin a crea un fișier do care încarcă setul de date auto:

capture log close
log folosind vars.log, înlocuiți
ștergeți toate
sysuse auto

prețurile din setul de date auto sunt în dolari 1978, deci ar putea fi util să le convertiți în dolari 2020. Pentru a face acest lucru, trebuie să înmulțiți prețurile cu un factor de conversie care este indicele prețurilor de consum în 2020 împărțit la indicele prețurilor de consum în 1978, sau aproximativ 4. Codul va fi:

gen price2020 = price*4

adăugați această linie în fișierul do, rulați-o și examinați rezultatele cu:

browse make price price2020

prețurile sunt încă în general mai mici decât ați vedea la un dealer auto, dar asta probabil pentru că mașinile de astăzi sunt mult mai frumoase decât mașinile din 1978. Acesta este un bun exemplu de cum să vă verificați munca: comparați ceea ce ați ajuns la ceea ce vă așteptați și, dacă nu se potrivesc, asigurați-vă că știți de ce!

intern, Stata a executat o buclă: a calculat prețul*4 pentru prima observație și a stocat rezultatul în preț2020 pentru prima observație, apoi a calculat prețul*4 pentru a doua observație și a stocat rezultatul în preț2020 pentru a doua observație și așa mai departe pentru toate observațiile din setul de date. Veți învăța cum să întindeți această paradigmă unică de observare la un moment dat în lupta de date în Stata, dar sarcinile care o rup (cum ar fi mijloacele de calcul) necesită o abordare diferită despre care vom vorbi în curând.

Să presupunem că am vrut să fim puțin mai preciși și să folosim 4.14 ca factor de conversie. S-ar putea să fiți tentat să încercați să adăugați cod care „remediază” variabila price2020 (să zicem, înmulțind-o cu 4.14/4). Dar este mai simplu și mai curat să remediați codul care l-a creat în primul rând. Schimbare:

gen price2020 = Preț*4

la:

gen price2020 = preț*4.14

și rulați din nou fișierul do. Do încarcă datele originale de pe disc de fiecare dată când este rulat, poate crea pur și simplu variabila price2020 așa cum ar trebui să fie.

având atât preț, cât și preț2020 v-a permis să le comparați valorile și să vă verificați munca. Dar dacă doriți doar să lucrați cu dolari 2020 și sunteți încrezători că aveți formula corectă, puteți utiliza comanda înlocuire pentru a schimba variabila de preț existentă în loc să creați una nouă:

replace price = price*4.14

rulați această versiune și veți primi mesajul (74 de modificări reale făcute). Având în vedere că setul de date are 74 de observații, acest lucru vă spune că toate au fost modificate, așa cum v-ați aștepta. Odată ce începeți să includeți condițiile if, câte observații au fost modificate efectiv pot fi informații foarte utile.

exercițiu: În afara Statelor Unite, eficiența combustibilului este frecvent măsurată în litri pe kilometru (rețineți că, deoarece combustibilul utilizat este în numărător, un număr redus este bun). Pentru a converti mile pe galon în litri pe kilometru, înmulțiți reciprocul mpg (1 / mpg) cu 2,35. Creați o variabilă care stochează eficiența combustibilului fiecărei mașini în litri pe kilometru.

crearea variabilelor cu condiții If

treceți la conținutul care urmează acestui videoclip

dacă o comandă gen are o condiție if, variabila rezultată va (și trebuie) să existe în continuare pentru toate observațiile. Cu toate acestea, i se va atribui o valoare lipsă pentru observațiile în care condiția if nu este adevărată. Dacă o comandă replace are o condiție if, observațiile în care condiția if nu este adevărată vor rămâne neschimbate. Acest lucru vă permite să setați variabile la valori diferite pentru observații diferite.

Să presupunem că doriți să restrângeți scara de cinci puncte a variabilei rep78 într-o scară de trei puncte. Adăugați următorul cod în fișierul do pentru a face acest lucru:

gen rep3 = 1 dacă rep78<3
înlocuiți rep3 = 2 dacă rep78==3
înlocuiți rep3 = 3 Dacă rep78>& rep78<.

prima linie creează noua variabilă rep3, dar o setează doar la una pentru cazurile în care rep78 este mai mică de trei. Ceilalți au dispărut. A doua linie schimbă unele dintre aceste lipsuri în două, iar a treia schimbă mai multe dintre ele în trei. Rulați fișierul do, notați numărul de observații modificate de fiecare linie și comparați-l cu numărul total de observații din setul de date.

care va fi valoarea rep3 pentru observațiile în care rep78 lipsește? Lipsește, așa cum ar trebui să fie, pentru că nu a fost niciodată setat la altceva. Cele cinci observații în care lipsește rep78 au fost excluse implicit sau explicit din toate cele trei comenzi, așa că au început cu o valoare lipsă pentru rep3 și nu au fost niciodată schimbate. (Dacă ați uitat să excludeți valorile lipsă din ultima comandă, atunci rep3 ar fi trei pentru mașinile în care lipsește rep78, o greșeală prea frecventă. Amintiți-vă, lipsa este în esență infinit.)

exercițiu: Combinarea celor și a celor doi are sens, deoarece sunt atât de puține, dar nu a existat o nevoie specială de a combina patru și cinci. Creați o variabilă rep4 care combină cele și două și renumerotează celelalte categorii în consecință (adică rep4 ar trebui să treacă de la unu la patru).

Recode

treceți la conținutul care urmează acestui videoclip

comanda recode vă oferă o modalitate alternativă de a crea rep3. Este conceput exclusiv pentru sarcini de recodare și este mult mai puțin flexibil decât gen și replace. Dar este foarte ușor de utilizat. Sintaxa este:

recode var (regula 1) (Regula 2) (mai multe reguli după cum este necesar…), gen(newvar)

opțiunea gen de la sfârșit nu este necesară—dacă nu este acolo, atunci variabila originală va fi modificată mai degrabă decât crearea unei noi variabile cu noile valori. Puteți, de asemenea, să lucrați la recode pe o listă de variabile, recodificându-le pe toate în același mod.

nucleul comenzii recode este o listă de reguli, fiecare între paranteze, care îi spun cum trebuie recodată o variabilă. Ele iau forma (inputValue = outputValue). InputValue poate fi un singur număr, o listă de numere separate prin spații sau o gamă de numere specificate cu început/sfârșit. Valoarea de ieșire va fi întotdeauna un singur număr. Orice lucru care nu este acoperit de o regulă este lăsat neschimbat, astfel încât să puteți utiliza recode pentru a schimba doar câteva valori ale unei variabile sau pentru a o redefini complet așa cum o facem aici. Iată o versiune recode de conversie rep78 la o scară de trei puncte:

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

valori lipsă necesare fără manipulare specială: deoarece lipsa nu a fost listată în valorile de intrare ale oricărei reguli, observațiile cu valori lipsă nu sunt modificate.

exercițiu: creați rep4b, combinând doar cele și două ca mai sus, folosind recode.

variabile indicatoare

treceți la conținutul care urmează acestui videoclip

în crearea variabilelor indicatoare puteți profita de faptul că Stata tratează true ca unul și false ca zero setând noua variabilă egală cu o condiție. Luați în considerare:

gen lowMPG = (mpg<20)

(parantezele sunt opționale, dar fac mai ușor de citit.) Acest lucru creează o variabilă indicator numit lowMPG care este unul (adevărat) pentru mașinile în care mpg este mai mică de douăzeci și zero (fals) în cazul în care mpg este mai mare sau egal cu douăzeci. Pentru a vedea rezultatele executați fișierul do și apoi tastați browse make mpg if lowmpg.

nicio mașină nu are o valoare lipsă pentru mpg, dar dacă o face, codul de mai sus i-ar atribui un zero pentru lowMPG ca și cum ar fi cunoscut că are un kilometraj bun de gaz. Variabila lowMPG ar trebui să lipsească pentru astfel de cazuri, ceea ce puteți face cu:

gen lowmpg = (mpg<20) dacă mpg<.

exercițiu: Creați o variabilă indicator care identifică mașinile cu înregistrări de reparații bune (definite ca rep78 mai mare de 3). Cum s-ar schimba codul dvs. dacă variabila indicatoare ar fi necesară pentru a identifica mașinile despre care se știe că au înregistrări bune de reparații?

variabile șir

treceți la conținutul următor acestui videoclip

comenzile gen și replace funcționează și cu variabile șir. Expresiile din partea dreaptă a semnului egal nu sunt matematice, dar respectă reguli similare. Valorile șirurilor merg întotdeauna între ghilimele, deci dacă doriți să stocați litera x într-o variabilă numită x, ați spune gen x = „x”. Stata nu ar găsi acest lucru confuz (deși s-ar putea), deoarece x în ghilimele („x”) înseamnă litera x și x fără ghilimele înseamnă variabila x.

adăugarea pentru șiruri este definită ca punând un șir după altul, deci „abc” + „DEF” = „abcdef”. Dar majoritatea lucrărilor cu șiruri se realizează prin funcții cu scop special care iau șiruri ca intrare (fie valori șir, fie variabile care conțin șiruri) și returnează șiruri ca ieșire.

variabila make înregistrează într-adevăr două informații: numele companiei care a produs mașina și numele modelului de mașină. Puteți extrage cu ușurință numele companiei folosind funcția word ():

gen company = word (make,1)

pentru a vedea rezultatele, executați fișierul do și tastați browse make company. Prima intrare sau argument pentru funcția word () este șirul pe care trebuie să acționeze (în acest caz o variabilă care conține șiruri). Al doilea este un număr care îi spune ce cuvânt doriți. Funcția rupe șirul de intrare în cuvinte pe baza spațiilor pe care le conține și îl returnează pe cel pe care l-ați cerut, în acest caz primul.

vom spune mult mai multe despre funcțiile șir în date Text (viitoare), dar dacă sunteți dornici de a începe puteți face o mare cu doar următoarele funcții:

word() extrage un cuvânt dintr-un șir
strpos() vă spune dacă un șir conține un alt șir și dacă da poziția sa
substr() extrage părți dintr-un șir
subinstr() înlocuiește o parte dintr-un șir cu altceva
lungime() vă spune cât de lung este un șir (câte caractere conține)

tip de ajutor și apoi numele unei funcții în fereastra principală Stata pentru a afla cum funcționează.

exercițiu: creați o variabilă de model care conține numele modelului de mașină (adică restul mărcii). Codul trebuie să fie capabil să se ocupe de nume de model, care sunt fie unul sau două cuvinte lungi.

conversia variabilelor String la variabile numerice

Salt la conținutul următor acestui videoclip

uneori, o variabilă care ar trebui să fie numerică este introdusă în Stata ca șir. Puteți remedia acest lucru cu comanda destring, care convertește o variabilă șir care conține numere într-o variabilă numerică. Sintaxa este doar destring variabilă, înlocui, în cazul în care variabila ar trebui să fie înlocuit cu numele variabilei (sau variabile) să fie destringed. Dacă variabila șir conține altceva decât numere, puteți adăuga opțiunea forță pentru a spune Stata să o convertească oricum, dar observațiile cu orice caractere non-numerice vor obține o valoare lipsă. Rețineți că” caractere non-numerice ” includ semne dolar și virgule!

în general, dacă trebuie să utilizați opțiunea force, este pentru că Stata nu este sigur că ceea ce faceți este o idee bună și ar trebui să vă gândiți cu atenție înainte de a o face. În acest caz, ar trebui să examinați caracterele non-numerice pentru a vedea dacă ar avea sens să le eliminați mai întâi (cum ar fi acele semne și virgule în dolari) sau dacă variabila nu este doar numere.

Acest set de date nu are variabile care trebuie distruse, așa că haideți să facem una:

gen x = „5”

rețineți cum ghilimelele din jurul „5” înseamnă că x este o variabilă șir care conține caracterul 5, nu o variabilă numerică care conține valoarea 5. Doar pentru a face lucrurile complicate, să schimbăm unele dintre valorile lui x în textul real:

replace x = „lipsă” dacă străin

acum încercați să destring x:

destring x, înlocuiți

Stata va refuza, deoarece unele dintre valorile x nu pot fi convertite în numere. Dar valorile care nu pot fi convertite sunt „lipsesc”, astfel încât este în întregime adecvat pentru a le converti la valori lipsă. Deci, încercați din nou cu opțiunea force:

destring x, înlocuiți force

acum Stata va converti x la o variabilă numerică, cu unele valori lipsă.

Egen

treceți la conținutul care urmează acestui videoclip

comanda egen, prescurtarea de la „generare extinsă” vă oferă acces la o altă bibliotecă de funcții. Este un pic de hodge-podge, dar funcțiile egen veți folosi cele mai multe statistici sumare calculate:

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. Ei lucrează, de asemenea, peste observații, și, prin urmare, nu se poate face cu ușurință folosind gen, deoarece funcționează o observație la un moment dat. Sintaxa pare aproape identică cu gen:

egen variable = function ()

marea diferență cu egen este că nu îți scrii propria expresie matematică; folosești doar o funcție din bibliotecă. De exemplu, dacă trebuie să setați o variabilă la o medie împărțită la două, nu puteți spune egen y = medie(x)/2. În schimb, ați rula mai întâi egen y = mean(x) și apoi înlocuiți y = y/2.

o altă diferență importantă este modul în care sunt tratate valorile lipsă. Amintiți-vă că cu gen, dacă lipsește o parte a intrării, ieșirea ar lipsi. Cu toate acestea, egen ignoră pur și simplu valorile lipsă și calculează rezultatul folosind datele disponibile. De obicei, asta îți dorești, dar trebuie să fii conștient de ceea ce face egen și să fii sigur că are sens pentru sarcina ta particulară.

funcțiile egen pentru calcularea statisticilor sumare sunt foarte frecvent combinate cu by pentru a calcula statisticile sumare pentru grupuri. Calculați prețul mediu al mașinii pentru fiecare companie și apoi vizualizați rezultatele cu:

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

reamintim că bysort company: sortează mai întâi datele după companie și apoi execută următoarea comandă egen separat pentru fiecare companie.

zerourile pentru deviația standard reflectă faptul că fiecare mașină produsă de aceeași companie are aceeași valoare de preț mediu. Asta pentru că meanPrice descrie compania, nu mașina. De fapt, aceasta este definiția unei variabile care descrie un grup: fiecare unitate din același grup trebuie să aibă aceeași valoare a variabilei.

dacă am fi vrut doar să vedem valoarea medie a prețului pentru fiecare companie, am fi putut rula doar:

fila companie, sumă(preț)

dar după ce am rulat egen avem acum media într-o variabilă, disponibilă pentru utilizare.

exercițiu: creați o variabilă care conține valoarea medie a rep78 pentru fiecare companie. Apoi examinați frecvențele rep78 în cadrul fiecărei companii prin crearea unui tabel bidirecțional cu tab. Asigurați-vă că includeți valori lipsă. Lincoln și Olds au aceeași medie; cât de bine credeți că acest lucru rezumă distribuția rep78 pentru cele două companii? Apoi luați în considerare valorile lipsă: să presupunem că valoarea reală a rep78 pentru mașinile cu Vales lipsă au fost dezvăluite. Ce ar trebui să fie pentru ca aceste mijloace să nu se schimbe? Cât de plauzibil este asta?

etichete

treceți la conținutul de după acest videoclip

etichetele bune vă fac Datele mult mai ușor de înțeles și de utilizat. În timp ce Stata are multe tipuri de etichete, ne vom concentra pe cele mai comune și mai utile: etichete variabile și etichete de valoare.

etichete variabile

etichete variabile transmite informații despre o variabilă, și poate fi un substitut pentru nume de variabile lungi. Acest set de date are deja un set bun de etichete variabile, după cum puteți vedea în fereastra variabile. Singura care este confuză este eticheta pe străin, așa că schimbați-o folosind comanda variabilă etichetă. Sintaxa pentru a seta o etichetă variabilă este:

label variable variableName „label”

deci tastați:

label variable foreign „Car Origin”

Uită-te din nou la fereastra variabilelor pentru a vedea rezultatele.

etichetele de valoare

etichetele de valoare sunt utilizate cu variabile categorice pentru a vă spune ce înseamnă categoriile. Am văzut unul în acțiune cu variabila străină: etichetele de valoare ne-au spus că un 0 înseamnă „intern” și un 1 înseamnă „străin.”

să explorăm etichetele de valoare prin etichetarea valorilor rep3, noua variabilă pe care am recodificat-o pentru a restrânge rep78 de la o scară de cinci puncte la o scară de trei puncte. Etichetele de valoare sunt o mapare dintr-un set de numere întregi într-un set de descrieri de text, deci primul pas este definirea hărții. Pentru a face acest lucru, utilizați comanda label define:

label define mapName value1 „label1” value2 „label2″…

astfel:

label define replabel 1 „Bad” 2 „Average” 3 „Good”

aceasta creează o mapare numită replabel, dar nu o aplică la nimic. Înainte de a face ceva util, trebuie să-i spuneți Stata să eticheteze valorile variabilei rep folosind maparea replabel pe care tocmai ați definit-o. Sintaxa este:

label values variable map

și astfel:

label values rep3 replabel

pentru a vedea rezultatele, executați:

List make rep3

odată ce o hartă este definită, o puteți aplica oricărui număr de variabile: înlocuiți doar variabila unică din comanda label values de mai sus cu o listă de variabile. Să presupunem că lucrați cu datele sondajului și variabilele dvs. includ sexul respondentului, sexul soțului respondentului și genurile tuturor copiilor respondentului. Puteți defini o singură hartă numită gen și apoi să o utilizați pentru a eticheta valorile tuturor variabilelor de gen.

trei comenzi pentru gestionarea etichetelor de valoare: label dir vă oferă o listă cu toate etichetele definite, iar label list vă spune ce înseamnă acestea. Comanda descrie vă spune numele etichetelor de valoare asociate fiecărei variabile (printre multe alte lucruri utile).

exercițiu: Creați etichete de valoare pentru rep4 și aplicați-le. Simțiți-vă liber să decideți cum să descrieți nivelurile.

etichete prin Recode

când utilizați recode pentru a crea o nouă variabilă, Stata va crea automat o etichetă variabilă pentru ea („RECODE of …”). De asemenea, puteți defini etichete de valoare pentru aceasta punând eticheta dorită pentru fiecare valoare la sfârșitul regulii care o definește. Creați încă o altă versiune a rep3, de data aceasta cu etichete chiar de la crearea sa, cu:

recode rep78 (1 2 = 1 „rău”) (3 = 2 „medie”) (4 5 = 3 „Bun”), gen (rep3c)

exercițiu: Creați un rep4c folosind recode, setând etichete de valoare pentru acesta.

acest fișier do modifică setul de date pe care îl folosește, deci ar trebui să salveze noua versiune. Amintiți-vă, nu salvați niciodată ieșirea peste intrare, deci nu salvați noile date ca auto. Dacă ați făcut – o, nu ați putea rula din nou acest fișier do: s-ar prăbuși atunci când a încercat să creeze price2020, deoarece acea variabilă ar exista deja în setul de date modificat. În schimb, salvați datele ca autoV2, ca în „versiunea 2 a setului de date auto.”

salvați autoV2, înlocuiți

în cele din urmă, închideți Jurnalul:

log close

aceasta ne aduce la sfârșitul introducerii la Stata. Sperăm că v-a fost de ajutor. Pentru a afla mai multe, luați în considerare citirea disputelor de date în Stata sau în celelalte conținuturi ale bazei de cunoștințe de calcul statistic SSCC.

ultima revizuire: 5/27/2020

Lasă un răspuns

Adresa ta de email nu va fi publicată.