Úvod do staty: vytváření a změna proměnných

Toto je šestá část úvodu do staty. Pokud jste ve Stata nováčkem, důrazně doporučujeme začít od začátku.

Přeskočit k obsahu po tomto videu,

Tento článek vás naučí základy vytváření nových proměnných, úpravy stávajících proměnných a vytváření štítků.

Generovat a nahrazovat

primární příkazy pro vytváření a změnu proměnných jsou generovat (obvykle zkráceně gen) a nahradit (což, stejně jako jiné příkazy, které mohou zničit informace, nemá zkratku). gen vytváří nové proměnné; nahradit změní hodnoty existujících proměnných. Jejich základní syntaxe je shodná:

gen proměnná = výraz,

nebo

nahradit proměnná = výraz,

, kde proměnná je název proměnné, kterou chcete vytvořit nebo změnit, a výraz je matematický výraz, jehož výsledek chcete dát do ní. Výrazy mohou být stejně jednoduché jako jedno číslo nebo mohou zahrnovat všechny druhy komplikovaných funkcí. Můžete prozkoumat, jaké funkce jsou k dispozici zadáním funkcí nápovědy. Pokud výraz závisí na chybějící hodnotě v kterémkoli bodě, výsledek chybí. Obvykle je to přesně to, co byste očekávali a chtěli.

je obzvláště důležité používat soubory do při změně dat, takže začněte vytvořením souboru do, který načte automatickou datovou sadu:

záznam záznamu zavřít
protokol pomocí vars.log, nahradit
Vymazat vše
sysuse auto

ceny v sadě auto dat jsou v dolarech 1978, takže by mohlo být užitečné převést je na dolary 2020. K tomu je třeba znásobit ceny konverzním faktorem, kterým je index spotřebitelských cen v roce 2020 vydělený indexem spotřebitelských cen v roce 1978, nebo asi 4. Kód bude:

gen price2020 = cena*4

Přidat tento řádek do společného souboru, spusťte jej, a zkoumat výsledky s:

procházet, aby cena price2020

ceny jsou stále obecně nižší, než byste vidět v prodejně, ale to je pravděpodobně proto, že dnešní auta jsou mnohem hezčí, než v roce 1978 auta. Toto je dobrý příklad toho, jak zkontrolovat svou práci: porovnejte, co jste dostali, s tím, co jste očekávali, a pokud se neshodují, ujistěte se, že víte proč!

interně stata provedla smyčku: to vypočtena cena*4 pro první pozorování a uložen výsledek v price2020 pro první pozorování, pak vypočte cena*4 pro druhé pozorování a uložen výsledek v price2020 pro druhé pozorování, a tak dále pro všechna pozorování v datové sadě. Dozvíte se, jak natáhnout tento jeden-pozorování-at-a-time paradigma v Data Hádky v Stata, ale úkoly, které zlomit to (stejně jako výpočet prostředky) vyžadují odlišný přístup, který budeme mluvit o tom brzy.

Předpokládejme, že jsme chtěli být trochu přesnější a použít 4.14 jako konverzní faktor. Možná budete v pokušení zkusit přidat kód ,který“ opravuje “ proměnnou price2020 (řekněme vynásobením 4, 14/4). Je však jednodušší a čistší opravit kód, který jej vytvořil. Změna:

gen price2020 = cena*4

:

gen price2020 = cena*4.14

a spusťte udělat soubor znovu. Protože váš soubor do načte původní data z disku pokaždé, když je spuštěn, může jednoduše vytvořit proměnnou price2020 tak, jak by měla být.

mít jak cenu, tak price2020 vám umožnilo porovnat jejich hodnoty a zkontrolovat svou práci. Ale pokud chceme pracovat pouze s 2020 dolarů, a jsou přesvědčeni, že máš vzorec, můžete použít příkaz nahradit změnit stávající cenu proměnné namísto vytváření nové:

nahradit cena = cena*4.14

Spustit tuto verzi a dostanete zprávu (74 skutečné změny). Vzhledem k tomu, že soubor dat má 74 pozorování, to vám říká, že všechny byly změněny, jak byste očekávali. Jakmile začnete včetně podmínek if, kolik pozorování bylo skutečně změněno, může být velmi užitečnou informací.

cvičení: Mimo Spojené státy se palivová účinnost často měří v litrech na kilometr(všimněte si, že protože použité palivo je v čitateli, nízké číslo je dobré). Pro převod mil na galon na litry na kilometr, násobit převrácenou hodnotou mpg (1/mpg) 2.35. Vytvořte proměnnou, která ukládá palivovou účinnost každého automobilu v litrech na kilometr.

vytváření proměnných s podmínkami If

přeskočit na obsah následující po tomto videu

pokud má příkaz gen podmínku if, výsledná proměnná bude (a musí) stále existovat pro všechna pozorování. Bude však přiřazena chybějící hodnota pro pozorování, pokud podmínka if není pravdivá. Pokud má příkaz Nahradit podmínku if, pozorování, kde podmínka if není pravdivá, zůstanou nezměněna. To umožňuje nastavit proměnné na různé hodnoty pro různá pozorování.

Předpokládejme, že jste chtěli sbalit pětibodovou stupnici proměnné rep78 do tříbodové stupnice. Chcete-li tak učinit, přidejte do souboru do následující kód:

gen rep3 = 1, pokud rep78<3
nahradit rep3 = 2, pokud rep78==3
nahradit rep3 = 3 pokud rep78>& rep78<.

první řádek vytvoří novou proměnnou rep3, ale nastaví ji pouze na jednu pro případy, kdy rep78 je menší než tři. Ostatní se pohřešují. Druhý řádek změní některé z těchto chyb na dvojky, a třetí změní více z nich na trojky. Spusťte soubor do, poznamenejte si počet pozorování změněných každým řádkem a porovnejte je s celkovým počtem pozorování v datové sadě.

jaká bude hodnota rep3 pro pozorování, kde rep78 chybí? Chybí, jak by to mělo být, protože to nikdy nebylo nastaveno na nic jiného. Pět pozorování, kde rep78 chybí, bylo implicitně nebo explicitně vyloučeno ze všech tří příkazů, takže začaly s chybějící hodnotou pro rep3 a nikdy nebyly změněny. (Pokud jste zapomněli vyloučit chybějící hodnoty z posledního příkazu, rep3 by byly tři pro auta, kde rep78 chybí, což je příliš častá chyba. Pamatujte, že chybějící je v podstatě nekonečno.)

cvičení: Kombinace těch a dvojic má smysl, protože jich je tak málo,ale nebylo třeba kombinovat čtyři a pětky. Vytvořte proměnnou rep4, která kombinuje jedničky a dvojky a podle toho přečísluje ostatní kategorie (tj.

Recode

přeskočit na obsah následující po tomto videu

příkaz recode vám dává alternativní způsob vytváření rep3. Je určen výhradně pro překódování úkolů a je mnohem méně flexibilní než gen a nahradit. Ale je to velmi snadné použití. Syntaxe je:

překódujte var (pravidlo 1) (Pravidlo 2) (více pravidel podle potřeby…), gen(newvar)

volba gen na konci není vyžadována – pokud tam není, původní proměnná bude změněna spíše než vytvoření nové proměnné s novými hodnotami. Můžete také překódovat práci na seznamu proměnných a všechny je překódovat stejným způsobem.

jádrem příkazu recode je seznam pravidel, každé v závorkách, které mu říkají, jak má být proměnná překódována. Mají formu (inputValue = outputValue). InputValue může být jedno číslo, seznam čísel oddělených mezerami nebo rozsah čísel zadaných pomocí začátku/konce. Výstup bude vždy jedno číslo. Vše, na co se nevztahuje pravidlo, zůstane nezměněno, takže můžete použít recode ke změně jen několika hodnot proměnné nebo ji zcela předefinovat, jak to děláme zde. Zde je recode verze konverzi rep78 na tříbodové stupnici:

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

Chybějící hodnoty potřebné žádné zvláštní zacházení: protože chybějící nebyl uveden ve vstupních hodnotách žádného pravidla, pozorování s chybějícími hodnotami se nemění.

cvičení: Vytvořte rep4b, který kombinuje pouze ty a dvojky, jak je uvedeno výše, pomocí recode.

Indikátor Proměnné

Přeskočit k obsahu po tomto videu,

Při vytváření ukazatel proměnné, které lze využít skutečnosti, že Stata zachází pravda a nepravda jako nula při nastavení nové proměnné rovna stavu. Zvažte:

gen lowMPG = (mpg<20)

(závorky jsou nepovinné, ale usnadňují čtení.) To vytváří indikátor proměnné s názvem lowMPG což je jedna (true) pro automobily, kde mpg je méně než dvacet a nula (false), kde mpg je větší než nebo rovno dvacet. Chcete-li zobrazit výsledky, spusťte soubor do a zadejte procházet make mpg, pokud lowMPG.

žádné auto nemá chybějící hodnotu pro mpg, ale pokud ano, výše uvedený kód by mu přiřadil nulu pro lowMPG, jako by bylo známo, že má dobrý počet najetých kilometrů. V takových případech by měla chybět proměnná lowMPG, což můžete udělat s:

gen lowMPG = (mpg<20), pokud mpg<.

cvičení: Vytvořte proměnnou indikátoru, která identifikuje automobily s dobrými záznamy o opravách (definovanými jako rep78 větší než 3). Jak by se váš kód změnil, kdyby proměnná indikátoru potřebovala k identifikaci automobilů, o nichž je známo, že mají dobré záznamy o opravách?

proměnné řetězce

přeskočit na obsah následující po tomto videu

příkazy gen a replace pracují také s proměnnými řetězce. Výrazy na pravé straně znaménka equals nejsou matematické, ale řídí se podobnými pravidly. Hodnoty řetězců jsou vždy v uvozovkách, takže pokud byste chtěli uložit písmeno x do proměnné nazvané x, řekli byste gen x = „x“. Stata by se najít to matoucí (i když můžete), protože x v uvozovkách („x“) znamená písmeno x a x bez uvozovek znamená, že proměnné x.

Doplněk pro řetězce je definováno jako uvedení jednu strunu po druhé, tak „abc“ + „def“ = „abcdef“. Většina práce s řetězci se však provádí pomocí speciálních funkcí, které berou řetězce jako vstup (buď hodnoty řetězců nebo proměnné obsahující řetězce) a vracejí řetězce jako výstup.

proměnná značka skutečně zaznamenává dvě informace: název společnosti, která Auto vyrobila, a název modelu automobilu. Název společnosti můžete snadno extrahovat pomocí funkce word ():

gen company = word (make,1)

Chcete-li zobrazit výsledky, spusťte soubor do a zadejte procházet make company. Prvním vstupem nebo argumentem pro funkci word() je řetězec, na který se má jednat (v tomto případě proměnná obsahující řetězce). Druhým je číslo, které říká, které slovo chcete. Funkce se přeruší vstupní řetězec do slov na základě prostory, které obsahuje, a vrátí ten, který jste chtěl, v tomto případě první.

řekneme mnohem více o řetězcových funkcích v textových datech( připravovaných), ale pokud jste dychtiví začít, můžete udělat hodně s následujícími funkcemi:

slovo() Extrakty slovo z řetězce
strpos() Řekne vám, pokud řetězec obsahuje jiný řetězec, a pokud tak svou pozici
substr() Extrakty částí řetězec
subinstr() Nahradí část řetězce s něco jiného
délka() Řekne vám, jak dlouho řetězec je (kolik znaků obsahuje)

Typ pomoci a pak název funkce v hlavní okno Stata se dozvíte, jak to funguje.

cvičení: Vytvořte proměnnou modelu obsahující název modelu automobilu (tj. Váš kód musí být schopen zpracovat názvy modelů, které jsou dlouhé jedno nebo dvě slova.

Převod Proměnné typu String do Numerické Proměnné

Přeskočit k obsahu po tomto videu,

Někdy proměnné, které by měly být číselné dostane vstoupil do Stata jako řetězec. Můžete to opravit příkazem destring, který převádí proměnnou řetězce, která obsahuje čísla, na číselnou proměnnou. Syntaxe je jen destring proměnné, nahradit, kde proměnná by měla být nahrazena název proměnné (nebo proměnných), které mají být destringed. Pokud řetězec proměnná obsahuje nic, ale čísla, můžete přidat možnost force říct, Stata převést to každopádně, ale pozorování s jakýmkoli non-číselné znaky budou mít chybějící hodnoty. Všimněte si, že „nečíselné znaky“ zahrnují znaky dolaru a čárky!

Obecně platí, že pokud musíte použít volbu force, je to proto, že Stata si není jistá, že to, co děláte, je dobrý nápad, a měli byste si to pečlivě promyslet. V tomto případě byste měli prozkoumat non-číselné znaky, jestli by mělo smysl odstranit jako první (jako ty znaky dolaru a čárky), nebo pokud proměnná není opravdu jen čísla.

Tento datový soubor nemá žádné proměnné, které je třeba destringed, tak pojďme udělat jedno:

gen x = „5“

Všimněte si, jak uvozovky kolem „5“ znamená, že x je řetězec proměnné obsahující znak 5, ne číselné proměnné obsahující hodnotu 5. Jen aby se věci komplikovaly, změňme některé hodnoty x na skutečný text:

replace x = „missing“ pokud cizí

nyní zkuste destring x:

destring x, nahradit

Stata odmítne, protože některé hodnoty x nelze převést na čísla. Hodnoty, které nelze převést, však „chybí“, takže je zcela vhodné je převést na chybějící hodnoty. Zkuste to tedy znovu s možností force:

destring x, nahraďte force

nyní Stata převede x na číselnou proměnnou s některými chybějícími hodnotami.

Egen

přeskočit na obsah následující po tomto videu

příkaz egen, zkratka pro „extended generate“ vám umožňuje přístup k jiné knihovně funkcí. Je to trochu hodge-podge, ale funkce egen budete používat nejvíce vypočítat souhrnné statistiky:

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. Pracují také napříč pozorováními, a proto je nelze snadno provést pomocí genu, protože funguje po jednom pozorování. Syntaxe vypadá téměř totožný s gen:

egen proměnná = funkce()

velký rozdíl s egen je, že nejste psaní své vlastní matematické vyjádření; jen využíváš funkce z knihovny. Například, pokud jste potřebovali nastavit proměnnou na průměr dělený dvěma, nemohli byste říci egen y = mean (x) / 2. Místo toho byste nejprve spustili egen y = mean (x) a poté nahradili y = y/2.

dalším důležitým rozdílem je způsob nakládání s chybějícími hodnotami. Připomeňme, že s genem, pokud by nějaká část vstupu chyběla, výstup by chyběl. Egen však jednoduše ignoruje chybějící hodnoty a vypočítá výsledek pomocí dostupných dat. Obvykle je to to, co chcete, ale musíte si být vědomi toho, co egen dělá, a ujistěte se, že to má smysl pro váš konkrétní úkol.

funkce egen pro výpočet souhrnné statistiky jsou velmi často kombinovány s by pro výpočet souhrnné statistiky pro skupiny. Vypočítejte průměrnou cenu automobilu pro každou společnost a poté zobrazte výsledky pomocí:

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

připomeňme, že bysort company: nejprve třídí data podle společnosti a poté spustí následující příkaz egen zvlášť pro každou společnost.

nuly pro směrodatnou odchylku odrážejí skutečnost, že každé auto vyrobené stejnou společností má stejnou hodnotu průměrné ceny. To proto, že meanPrice popisuje společnost, ne auto. Ve skutečnosti je to definice proměnné, která popisuje skupinu: každá jednotka ve stejné skupině musí mít stejnou hodnotu proměnné.

kdybychom chtěli vidět pouze střední hodnotu ceny pro každou společnost, mohli bychom právě spustit:

Tab company, sum (price)

ale po spuštění egen máme nyní průměr v proměnné, k dispozici pro použití.

cvičení: Vytvořte proměnnou obsahující střední hodnotu rep78 pro každou společnost. Poté prozkoumejte frekvence rep78 v každé společnosti vytvořením obousměrné tabulky s kartou. Nezapomeňte uvést chybějící hodnoty. Lincoln a Olds mají stejný průměr; jak dobře si myslíte, že to shrnuje distribuci rep78 pro obě společnosti? Dále zvažte chybějící hodnoty: předpokládejme, že byla odhalena skutečná hodnota rep78 pro automobily s chybějícími vales. Co by musely být, aby se tyto prostředky nezměnily? Jak věrohodné to je?

štítky

přeskočit na obsah následující po tomto videu

dobré štítky usnadňují pochopení a práci s nimi. Zatímco Stata má mnoho druhů štítků, zaměříme se na nejběžnější a nejužitečnější: proměnné štítky a hodnotové štítky.

štítky proměnných

štítky proměnných sdělují informace o proměnné a mohou být náhradou za dlouhé názvy proměnných. Tato datová sada již má dobrou sadu proměnných štítků, jak můžete vidět v okně proměnné. Jediný, který je matoucí, je štítek na cizím,takže jej změňte pomocí příkazu proměnné štítku. Syntaxe pro nastavení proměnné štítku je:

label proměnné variableName „štítek“

typ:

label proměnné cizí „Auto Původu“

Podívejte se na Proměnné okno znovu vidět výsledky.

štítky hodnot

štítky hodnot se používají s kategorickými proměnnými, aby vám řekly, co znamenají Kategorie. Viděli jsme jednu v akci s cizí proměnnou: byly to hodnotové štítky, které nám řekly, že 0 znamená „domácí“ a 1 znamená „cizí“.“

Pojďme prozkoumat hodnoty štítků, značení hodnot rep3, nové proměnné jsme překódovat, aby kolaps rep78 z pětibodové stupnice do tří bodové stupnici. Štítky hodnot jsou mapování ze sady celých čísel na sadu textových popisů, takže prvním krokem je definování mapy. K tomu použijte příkaz label define:

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

tedy:

label define replabel 1 “ Bad “ 2 „Average “ 3″Good“

tím se vytvoří mapování nazvané replabel, ale nepoužije se na nic. Než to udělá něco užitečného, musíte říct Stata označit hodnoty proměnné rep pomocí mapování replabel, které jste právě definovali. Syntaxe je:

označení hodnot proměnné mapu

A tedy:

label hodnoty rep3 replabel

zobrazit výsledky, run:

seznam, aby rep3

Jednou mapě je definován můžete použít na libovolný počet proměnných: jen nahradit jednu proměnnou v označení hodnoty příkazu výše se seznamem proměnných. Předpokládejme, že pracujete s údaji z průzkumu a vaše proměnné zahrnují pohlaví respondenta, pohlaví manžela respondenta a pohlaví všech dětí respondenta. Můžete definovat pouze jednu mapu s názvem gender a poté ji použít k označení hodnot všech proměnných pohlaví.

tři příkazy pro správu hodnotových štítků: label dir vám poskytne seznam všech definovaných štítků a seznam štítků vám řekne, co znamenají. Příkaz popsat vám řekne název hodnotových štítků přidružených ke každé proměnné (mimo jiné mnoho dalších užitečných věcí).

cvičení: Vytvořte štítky s hodnotami pro rep4 a aplikujte je. Neváhejte se rozhodnout, jak popsat úrovně.

štítky pomocí Recode

Pokud použijete recode k vytvoření nové proměnné, Stata pro ni automaticky vytvoří štítek proměnné („RECODE of …“). Můžete také definovat štítky hodnot pro něj umístěním požadovaného štítku pro každou hodnotu na konec pravidla, které ji definuje. Vytvořit další verzi rep3, tentokrát s popisky hned od svého vzniku s:

recode rep78 (1 2 = 1 „Špatné“) (3 = 2 „Průměr“) (4 5 = 3 „Dobrý“), gen(rep3c)

Cvičení: Vytvořte rep4c pomocí recode a nastavte pro něj štítky hodnot.

Tento soubor do změní datovou sadu, kterou používá, takže by měl uložit novou verzi. Nezapomeňte, že nikdy neukládejte výstup přes vstup, takže nová data neukládejte jako automatická. Pokud ano, jste nemohli spustit to udělat soubor znovu: to by pád, když se snažil vytvořit price2020 proto, že proměnná by již existovat v modifikované datové sady. Místo toho uložte data jako autoV2, jako v “ verzi 2 automobilové datové sady.“

uložit autoV2, nahradit

nakonec zavřete protokol:

log zavřít

tím se dostáváme na konec úvodu do Stata. Doufáme, že vám to pomohlo. Chcete-li se dozvědět více, zvažte čtení dat hádky v Stata, nebo jiný obsah statistické výpočetní znalostní báze SSCC je.

poslední revize: 27.5.2020

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.