Bevezetés a Statába: változók létrehozása és megváltoztatása

Ez a Stata bevezetésének hatodik része. Ha még nem ismeri a Stata-t, javasoljuk, hogy kezdje az elejétől.

ugrás a videót követő tartalomra

Ez a cikk megtanítja az új változók készítésének, a meglévő változók módosításának és a címkék létrehozásának alapjait.

Generate and Replace

a változók létrehozására és megváltoztatására szolgáló elsődleges parancsok a generate (általában rövidítve gen) és a replace (amely, mint más, információkat megsemmisítő parancsok, nem rendelkezik rövidítéssel). a gen új változókat hoz létre; cserélje ki a meglévő változók értékeit. Alapvető szintaxisuk azonos:

gen variable = expression

vagy

cserélje ki a változót = expression

ahol a változó a létrehozni vagy módosítani kívánt változó neve, az expression pedig az a matematikai kifejezés, amelynek eredményét bele szeretné tenni. A kifejezések lehetnek egyszerűek, mint egyetlen szám, vagy mindenféle bonyolult funkciót tartalmazhatnak. A súgófunkciók beírásával felfedezheti, hogy mely funkciók állnak rendelkezésre. Ha a kifejezés bármely ponton hiányzó értéktől függ, az eredmény hiányzik. Általában ez pontosan az, amit elvárnak és akarnak.

különösen fontos a do fájlok használata az adatok megváltoztatásakor, ezért kezdje el létrehozni egy do fájlt, amely betölti az automatikus adatkészletet:

capture log Bezárás
napló a vars használatával.napló, csere
Összes törlése
sysuse auto

az automatikus adatkészlet árai 1978 dollárban vannak, ezért hasznos lehet 2020 dollárra konvertálni őket. Ehhez meg kell szorozni az árakat egy átváltási tényezővel, amely a 2020-as fogyasztói árindex osztva az 1978-as fogyasztói Árindexszel, vagy körülbelül 4-gyel. A kód lesz:

gen price2020 = price * 4

adja hozzá ezt a sort a do fájljához, futtassa le, és vizsgálja meg az eredményeket a következőkkel:

böngészés make price price2020

az árak általában még mindig alacsonyabbak, mint amit egy autókereskedésben látna, de ez valószínűleg azért van, mert a mai autók sokkal szebbek, mint az 1978-as autók. Ez egy jó példa arra, hogyan ellenőrizze a munkáját: hasonlítsa össze, amit kapott, hogy mit várt, és ha nem egyeznek, győződjön meg róla, hogy tudja, miért!

belsőleg a Stata végrehajtott egy hurkot: kiszámította az árat*4 az első megfigyelésre, és az eredményt price2020-ban tárolta az első megfigyelésre, majd kiszámította az árat*4 a második megfigyelésre, és az eredményt price2020-ban tárolta a második megfigyelésre, és így tovább az adathalmaz összes megfigyelésére. Megtanulja, hogyan nyújthatja ki ezt az egy-megfigyelés-egy-időben paradigmát a Stata-ban zajló Adatharcban, de az azt megtörő feladatok (például az eszközök kiszámítása) más megközelítést igényelnek, amelyről hamarosan beszélünk.

tegyük fel, hogy egy kicsit pontosabbak akarunk lenni, és a 4.14-et használjuk konverziós tényezőként. Kísértésbe eshet, hogy megpróbál olyan kódot hozzáadni, amely “javítja” a price2020 változót (mondjuk megszorozzuk 4.14/4-gyel). De egyszerűbb és tisztább kijavítani azt a kódot, amely eredetileg létrehozta. Változás:

gen price2020 = ár*4

to:

gen price2020 = ár*4.14

és futtassa újra a do fájlt. Mivel a do fájl minden futtatáskor betölti az eredeti adatokat a lemezről, egyszerűen létrehozhatja a price2020 változót, ahogy lennie kell.

mind az ár, mind a price2020 lehetővé tette, hogy összehasonlítsa értékeiket és ellenőrizze munkáját. De ha csak 2020 dollárral szeretne dolgozni, és biztos benne, hogy a képlet megfelelő, akkor a replace paranccsal megváltoztathatja a meglévő árváltozót, ahelyett, hogy újat hozna létre:

replace price = price*4.14

futtassa ezt a verziót, és megkapja az üzenetet (74 valódi változás történt). Tekintettel arra, hogy az adathalmaz 74 megfigyelést tartalmaz, ez azt mondja, hogy mindegyik megváltozott, ahogy az elvárható. Miután elkezdte belefoglalni az IF feltételeket, nagyon hasznos információ lehet, hogy hány megfigyelést változtattak meg valójában.

gyakorlat: Az Egyesült Államokon kívül az üzemanyag-hatékonyságot gyakran literben / kilométerben mérik (vegye figyelembe, hogy mivel a felhasznált üzemanyag a számlálóban van, az alacsony szám jó). A mérföld / gallon literre / kilométerre történő átváltásához szorozza meg az mpg (1/mpg) reciprokát 2,35-tel. Hozzon létre egy változót, amely az egyes autók üzemanyag-hatékonyságát literben / kilométerben tárolja.

változók létrehozása If feltételekkel

ugrás a videó következő tartalomra

Ha egy gen parancsnak van if feltétele, akkor az eredményül kapott változó továbbra is fennáll minden megfigyelésnél. Azonban ez lesz rendelve egy hiányzó értéket megfigyelések, ha az if feltétel nem igaz. Ha egy replace parancsnak van if feltétele, akkor azok a megfigyelések, ahol az if feltétel nem igaz, változatlanok maradnak. Ez lehetővé teszi a változók különböző értékekre történő beállítását a különböző megfigyelésekhez.

tegyük fel, hogy a rep78 változó ötpontos skáláját hárompontos skálává szeretné összeomlasztani. Ehhez adja hozzá a következő kódot a do fájlhoz:

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

az első sor létrehozza az új rep3 változót, de csak akkor állítja be egyre, ha a rep78 kevesebb, mint három. A többiek eltűnnek. A második sor néhány hiányzást kettesre változtat, a harmadik pedig többet hármasra. Futtassa a do fájlt, jegyezze fel az egyes sorok által módosított megfigyelések számát, és hasonlítsa össze az adathalmaz összes megfigyelésének számával.

mekkora lesz a rep3 értéke azoknál a megfigyeléseknél, ahol a rep78 hiányzik? Hiányzik, ahogy lennie kell, mert soha nem volt beállítva semmi másra. Az öt megfigyelést, ahol a rep78 hiányzik, implicit vagy explicit módon kizárták mindhárom parancsból, így a rep3 hiányzó értékével indultak, és soha nem változtak. (Ha elfelejtette kizárni a hiányzó értékeket az utolsó parancsból, akkor a rep3 három lenne azoknál az autóknál, ahol a rep78 hiányzik, ez egy túl gyakori hiba. Ne feledje, hogy a hiányzó lényegében végtelen.)

gyakorlat: Az egyes és a kettő kombinálásának van értelme, mert olyan kevés van belőlük, de nem volt különösebb szükség a négyes és az ötös kombinálására. Hozzon létre egy rep4 változót, amely egyesíti az egyeseket és a ketteseket, és ennek megfelelően újraszámozza a többi kategóriát (azaz a rep4-nek egyről négyre kell mennie).

Recode

ugrás a videót követő tartalomra

a recode parancs alternatív módot kínál a rep3 létrehozására. Kizárólag recoding feladatokra tervezték, és sokkal kevésbé rugalmas, mint a gen és a replace. De nagyon könnyen használható. A szintaxis:

recode var (1.szabály) (2. szabály) (további szabályok szükség szerint…), gen(newvar)

a végén lévő gen opció nem szükséges—ha nincs ott, akkor az eredeti változó megváltozik, ahelyett, hogy új változót hozna létre az új értékekkel. Azt is recode munka egy változók listáját, recoding őket ugyanúgy.

a recode parancs lényege a szabályok listája, mindegyik zárójelben, amelyek megmondják, hogyan kell egy változót újrakódolni. Ezek formája (inputValue = outputValue). Az inputValue lehet egyetlen szám, szóközzel elválasztott számok listája, vagy a start/end funkcióval megadott számtartomány. Az outputValue mindig egyetlen szám lesz. Bármi, amire egy szabály nem vonatkozik, változatlan marad, így a recode segítségével megváltoztathatja a változó néhány értékét, vagy teljesen újradefiniálhatja, ahogy itt tesszük. Itt van egy recode változata konvertáló rep78 egy hárompontos skálán:

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

hiányzó értékek nem igényelnek különleges kezelést: mivel a hiányzó nem szerepel egyetlen szabály bemeneti értékeiben sem, a hiányzó értékekkel rendelkező megfigyelések nem változnak.

gyakorlat: hozzon létre rep4b-t, amely csak a fentiek szerint kombinálja a kettőt, a recode használatával.

Indikátorváltozók

ugrás a videót követő tartalomra

indikátorváltozók létrehozásakor kihasználhatja azt a tényt, hogy a Stata a true-t egynek, a false-t pedig nullának tekinti, ha az új változót egy feltétellel egyenlővé teszi. Fontolja meg:

gen lowMPG = (mpg<20)

(a zárójelek nem kötelezőek, de megkönnyítik az olvasást.) Ez létrehoz egy indikátor változó úgynevezett lowMPG amely egy (igaz) az autók, ahol mpg kevesebb, mint húsz és nulla (hamis), ahol mpg nagyobb vagy egyenlő húsz. Az eredmények megtekintéséhez futtassa a do fájlt, majd írja be a Tallózás make mpg ha lowMPG.

egyetlen autónak sincs hiányzó értéke az mpg-hez, de ha igen, akkor a fenti kód nullát rendelne hozzá az lowMPG-hez, mintha ismert lenne, hogy jó a futásteljesítménye. Ilyen esetekben a lowMPG változónak hiányoznia kell, amit megtehetsz:

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

gyakorlat: Hozzon létre egy indikátor változót, amely azonosítja a jó javítási rekordokkal rendelkező autókat (rep78 nagyobb, mint 3). Hogyan változna a kódja, ha az indikátor változó szükséges ahhoz, hogy azonosítsa azokat az autókat, amelyekről ismert, hogy jó javítási nyilvántartásokkal rendelkeznek?

String változók

ugrás a videó következő tartalmára

a gen és a replace parancsok is működnek string változókkal. Az egyenlőségjel jobb oldalán található kifejezések nem matematikusak, de hasonló szabályokat követnek. A karakterlánc-értékek mindig idézőjelben vannak, tehát ha az x betűt egy X nevű változóban szeretné tárolni, akkor azt mondaná, hogy gen x = “x”. A Stata ezt nem találná zavarónak (bár lehet, hogy), mert x idézőjelben (“x”) az x betűt jelenti, x idézőjelek nélkül pedig az X változót.

a karakterláncok kiegészítése úgy van meghatározva, hogy egyik karakterláncot egymás után helyezzük el, tehát” abc ” + ” def ” = “abcdef”. De a legtöbb munkát a karakterláncokkal speciális célú függvények végzik, amelyek a karakterláncokat bemenetként veszik fel (akár karakterláncértékek, akár karakterláncokat tartalmazó változók), a karakterláncokat pedig kimenetként adják vissza.

a make változó valójában két információt rögzít: az autót gyártó cég nevét és az autómodell nevét. A Word() függvény segítségével könnyedén kibonthatja a cég nevét:

gen company = word(make,1)

Az eredmények megtekintéséhez futtassa a do fájlt, majd írja be a Tallózás a make company-t. A word() függvény első bemenete vagy argumentuma az a karakterlánc, amelyen cselekedni kell (ebben az esetben egy karakterláncot tartalmazó változó). A második egy szám, amely megmondja, hogy melyik szót szeretné. A függvény a benne lévő szóközök alapján szavakra bontja a bemeneti karakterláncot, és visszaadja a kért, ebben az esetben az elsőt.

a szöveges adatokban sokkal többet fogunk mondani a karakterlánc-funkciókról (hamarosan), de ha alig várja, hogy elkezdhesse, akkor a következő funkciókkal sokat tehet:

word() Kivonatol egy szót egy karakterláncból
strpos() megmondja, hogy egy karakterlánc tartalmaz-e egy másik karakterláncot, és ha igen, annak pozícióját
substr() kivonja a karakterlánc részeit
substr() a karakterlánc egy részét valami másra cseréli
hossz() megmondja, hogy egy karakterlánc milyen hosszú (hány karaktert tartalmaz)

írja be a súgót, majd a függvény nevét a fő Stata ablak, hogy megtanulják, hogyan működik.

gyakorlat: hozzon létre egy modellváltozót, amely tartalmazza az autómodell nevét (azaz a többi gyártmányt). A kódnak képesnek kell lennie egy vagy két szó hosszú modellnevek kezelésére.

Karakterláncváltozók konvertálása numerikus változókká

ugrás a videó következő tartalmára

néha egy numerikus változót karakterláncként kell beírni a Stata-ba. Ezt kijavíthatja a destring paranccsal, amely a számokat tartalmazó string változót numerikus változóvá alakítja. A szintaxis csak destring változó, cserélje ki, ahol a változót ki kell cserélni a destringálni kívánt változó (vagy változók) nevével. Ha a string változó csak számokat tartalmaz, akkor hozzáadhatja az erő opciót, hogy elmondja a Stata-nak, hogy konvertálja azt, de a nem numerikus karakterekkel végzett megfigyelések hiányzó értéket kapnak. Ne feledje, hogy a” nem numerikus karakterek ” dollárjeleket és vesszőket tartalmaznak!

általában, ha az erő opciót kell használnod, az azért van, mert a Stata nem biztos benne, hogy jó ötlet, amit csinálsz, és alaposan át kell gondolnod, mielőtt megtennéd. Ebben az esetben meg kell vizsgálnia a nem numerikus karaktereket, hogy lássa, van-e értelme először eltávolítani őket (például a dollárjeleket és vesszőket), vagy ha a változó valójában nem csak számok.

Ez az adathalmaz nem tartalmaz olyan változókat, amelyeket destringálni kell, ezért készítsünk egyet:

gen x = “5”

vegye figyelembe, hogy az “5” körüli idézőjelek azt jelentik, hogy x egy string változó, amely az 5 karaktert tartalmazza, nem pedig az 5 értéket tartalmazó Numerikus változó. Csak azért, hogy bonyolulttá tegyük a dolgokat, változtassuk meg az x néhány értékét a tényleges szövegre:

cserélje x = “hiányzó” ha idegen

most próbálja destring x:

destring x, cserélje

Stata visszautasítja, mert egyes értékei x nem lehet konvertálni a számokat. De azok az értékek, amelyeket nem lehet átalakítani, “hiányoznak”, ezért teljesen helyénvaló azokat hiányzó értékekké konvertálni. Tehát próbálkozzon újra az erő opcióval:

destring x, cserélje ki az erőt

most a Stata átalakítja x-et numerikus változóvá, néhány hiányzó értékkel.

Egen

ugrás a videót követő tartalomra

az egen parancs, rövidítve az “extended generate” – hez, hozzáférést biztosít egy másik függvénykönyvtárhoz. Ez egy kicsit hodge-podge, de az egen funkciókat fogja használni a legtöbb számítani összefoglaló statisztikák:

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. Megfigyelések között is működnek, ezért nem lehet könnyen elvégezni a gen használatával, mivel egyszerre csak egy megfigyelést működik. A szintaxis majdnem megegyezik a gen-rel:

egen variable = function()

a nagy különbség az egen-nel az, hogy nem saját matematikai kifejezést írsz; csak egy függvényt használsz a könyvtárból. Például, ha egy változót kettővel osztott átlagra kellett állítania, akkor nem mondhatta egen y = átlag(x)/2. Ehelyett először futtassa az egen y = mean(x) értéket, majd cserélje ki az y = y/2 értéket.

egy másik fontos különbség a hiányzó értékek kezelése. Emlékezzünk arra, hogy a gen esetén, ha a bemenet bármely része hiányzik, a kimenet hiányzik. Az egen azonban egyszerűen figyelmen kívül hagyja a hiányzó értékeket, és a rendelkezésre álló adatok alapján kiszámítja az eredményt. Általában ez az, amit akarsz, de tisztában kell lenned azzal, amit egen csinál, és biztosnak kell lenned abban, hogy van értelme az adott feladatodnak.

az egen függvényeket az összefoglaló statisztikák kiszámításához nagyon gyakran kombinálják a by-val a csoportok összefoglaló statisztikáinak kiszámításához. Számítsa ki az egyes vállalatok átlagos autóárát, majd tekintse meg az eredményeket:

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

Emlékezzünk vissza, hogy bysort company: először rendezi az adatokat a cég, majd fut a következő egen parancsot külön-külön minden vállalat.

a szórás nullái azt a tényt tükrözik, hogy minden, ugyanazon vállalat által gyártott autó átlagára azonos. Ez azért van, mert a meanPrice a céget írja le, nem az autót. Valójában ez egy olyan változó definíciója, amely egy csoportot ír le: ugyanazon csoporton belül minden egységnek azonos értékkel kell rendelkeznie a változóval.

Ha csak az egyes vállalatok átlagértékét akartuk volna látni, akkor csak futhattunk volna:

tab company, sum(price)

de az egen futtatása után most már van egy átlag egy változóban, amely használható.

gyakorlat: hozzon létre egy változót, amely tartalmazza az egyes vállalatok rep78 átlagértékét. Ezután vizsgálja meg a rep78 frekvenciáit az egyes vállalatokon belül egy kétirányú táblázat létrehozásával a tab segítségével. Ügyeljen arra, hogy a hiányzó értékeket is tartalmazza. A Lincoln és az Olds ugyanazt jelenti; Ön szerint ez mennyire foglalja össze a rep78 eloszlását a két vállalat számára? Ezután vegye figyelembe a hiányzó értékeket: tegyük fel, hogy kiderült a rep78 tényleges értéke a hiányzó völgyekkel rendelkező autók esetében. Mi kell ahhoz, hogy ezek az eszközök ne változzanak? Mennyire hihető ez?

címkék

ugrás a videót követő tartalomra

A jó címkék sokkal könnyebbé teszik az adatok megértését és kezelését. Míg a Stata sokféle címkével rendelkezik, a leggyakoribb és leghasznosabb címkékre összpontosítunk: változó címkékre és értékcímkékre.

változó címkék

a változó címkék információt közvetítenek egy változóról, és helyettesíthetik a hosszú változó neveket. Ez az adatkészlet már rendelkezik jó változó címkékkel, amint az a változók ablakban látható. Az egyetlen zavaró az idegen címke, ezért változtassa meg a label variable paranccsal. A változó címke beállításának szintaxisa:

label variable variableName “label”

tehát írja be:

label variable foreign “Car Origin”

nézze meg újra a változók ablakot az eredmények megtekintéséhez.

értékcímkék

az Értékcímkéket kategorikus változókkal együtt használják, hogy megmondják, mit jelentenek a kategóriák. Láttunk egyet akcióban az idegen változóval: az értékcímkék azt mondták nekünk, hogy a 0 jelentése “Belföldi”, az 1 pedig “külföldi”.”

fedezzük fel az értékcímkéket a rep3 értékeinek címkézésével, az új változóval, amelyet a rep78 ötpontos skáláról hárompontos skálára történő összeomlásához kódoltunk. Az értékcímkék egész számok halmazából szöveges leírások halmazába történő leképezés, ezért az első lépés a térkép meghatározása. Ehhez használja a label define parancsot:

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

így:

label define replabel 1 “Rossz” 2 “Átlagos”3″ Jó ”

Ez létrehoz egy replabel nevű leképezést, de semmire nem alkalmazza. Mielőtt bármi hasznosat tenne, meg kell mondania a Stata-nak, hogy címkézze meg a rep változó értékeit az imént definiált replabel leképezéssel. A szintaxis a következő:

label values variable map

és így:

label values rep3 replabel

Az eredmények megtekintéséhez futtassa:

list make rep3

a térkép meghatározása után tetszőleges számú változóra alkalmazhatja: csak cserélje le a fenti label values parancs egyetlen változóját a változók listájára. Tegyük fel, hogy felmérési adatokkal dolgozik, és a változók magukban foglalják a válaszadó nemét, a válaszadó házastársának nemét és a válaszadó összes gyermekének nemét. Meghatározhat csak egy gender nevű térképet, majd felhasználhatja az összes nemi változó értékeinek címkézésére.

három parancs az értékcímkék kezeléséhez: a label dir megadja az összes definiált címke listáját, a label list pedig megmondja, hogy mit jelentenek. A leírás parancs megmondja az egyes változókhoz társított értékcímkék nevét (sok más hasznos dolog mellett).

gyakorlat: Hozzon létre értékcímkéket a rep4 számára, és alkalmazza őket. Nyugodtan döntse el, hogyan írja le a szinteket.

címkék a Recode segítségével

amikor a recode használatával új változót hoz létre, a Stata automatikusan létrehoz egy változó címkét (“RECODE of …”). Az értékcímkéket úgy is meghatározhatja, hogy az egyes értékekhez a kívánt címkét az azt meghatározó szabály végére helyezi. Hozzon létre még egy rep3 verziót, ezúttal címkékkel közvetlenül a létrehozásától kezdve, a következőkkel:

recode rep78 (1 2 = 1 “Rossz”) (3 = 2 “Átlagos”) (4 5 = 3 “Jó”), gen(rep3c)

gyakorlat: Hozzon létre egy rep4c segítségével recode, beállítás érték címkék is.

Ez a do fájl megváltoztatja az általa használt adatkészletet, ezért el kell mentenie az új verziót. Ne feledje, hogy soha ne mentse a kimenetet a bemenet fölé, ezért ne mentse az új adatokat automatikusan. Ha igen, akkor nem tudta újra futtatni ezt a do fájlt: összeomlik, amikor megpróbálta létrehozni a price2020-at, mert ez a változó már létezik a módosított adatkészletben. Ehelyett mentse az adatokat autoV2 néven, mint a “2.verzió az autó adatkészlet.”

save autoV2, cserélje

végül zárja be a naplót:

log close

ezzel elérkeztünk a Stata bevezetésének végéhez. Reméljük, hogy hasznos volt az Ön számára. Ha többet szeretne megtudni, fontolja meg a Stata-ban vagy az SSCC statisztikai számítástechnikai tudásbázisának egyéb tartalmában az Adatcsavar olvasását.

Utolsó módosítás: 5/27/2020

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.