Dit is deel zes van inleiding tot Stata. Als je nieuw bent in Stata raden we je aan vanaf het begin te beginnen.
Skip to the content na deze video
Dit artikel leert u de basisprincipes van het maken van nieuwe variabelen, het wijzigen van bestaande variabelen en het maken van labels.
Generate and Replace
de primaire commando ’s voor het aanmaken en veranderen van variabelen zijn generate (meestal afgekort gen) en replace (die, net als andere commando’ s die informatie kunnen vernietigen, geen afkorting heeft). gen maakt nieuwe variabelen; vervang verandert de waarden van bestaande variabelen. Hun kernsyntaxis is identiek:
gen variable = expression
or
replace variable = expression
waarbij variabele de naam is van de variabele die u wilt maken of wijzigen, en expressie is de wiskundige expressie waarvan u het resultaat wilt toevoegen. Expressies kunnen zo eenvoudig zijn als een enkel getal of allerlei ingewikkelde functies omvatten. U kunt nagaan welke functies beschikbaar zijn door helpfuncties te typen. Als de expressie op enig moment afhankelijk is van een ontbrekende waarde, ontbreekt het resultaat. Meestal is dit precies wat je zou verwachten en willen.
Het is vooral belangrijk om do-bestanden te gebruiken wanneer u uw gegevens wijzigt, dus begin met het maken van een Do-bestand dat de automatische gegevensverzameling laadt:
capture log close
log met vars.log, vervang
Wis alles
sysuse auto
de prijzen in de auto data set zijn in 1978 dollars, dus het kan nuttig zijn om ze te converteren naar 2020 dollars. Om dit te doen moet je de prijzen vermenigvuldigen met een conversiefactor die de consumptieprijsindex in 2020 gedeeld door de consumptieprijsindex in 1978, of ongeveer 4. De code zal zijn:
gen price2020 = price * 4
voeg deze regel toe aan uw do-bestand, Voer het uit en bekijk de resultaten met:
browse make price price2020
de prijzen zijn over het algemeen nog steeds lager dan bij een autodealer, maar dat komt waarschijnlijk omdat de auto ’s van vandaag veel mooier zijn dan auto’ s uit 1978. Dit is een goed voorbeeld van hoe je je werk kunt controleren: vergelijk wat je hebt met wat je verwacht, en als ze niet overeenkomen, zorg ervoor dat je weet waarom!
intern voerde Stata een lus uit: het berekende prijs * 4 voor de eerste waarneming en bewaarde het resultaat in prijs2020 voor de eerste waarneming, vervolgens berekende prijs*4 voor de tweede waarneming en bewaarde het resultaat in prijs2020 voor de tweede waarneming, enzovoort voor alle waarnemingen in de gegevensverzameling. Je leert hoe je dit one-observation-at-a-time paradigma uitrekent in Gegevensbeheer in Stata, maar taken die het breken (zoals rekenmiddelen) vereisen een andere aanpak waar we het snel over zullen hebben.
stel dat we wat preciezer willen zijn en 4.14 als conversiefactor willen gebruiken. Je zou geneigd zijn om te proberen om code toe te voegen die “fixes” De price2020 variabele (laten we zeggen, vermenigvuldigen met 4.14/4). Maar het is eenvoudiger en schoner om de code die het in de eerste plaats gemaakt vast te stellen. Verander:
gen price2020 = price*4
naar:
gen price2020 = price*4.14
en voer het DO-bestand opnieuw uit. Omdat uw do-bestand laadt de originele gegevens van de schijf elke keer dat het wordt uitgevoerd, kan het eenvoudig maken van de price2020 variabele de manier waarop het zou moeten zijn.
met zowel price als price2020 kon je hun waarden vergelijken en je werk controleren. Maar als u alleen met 2020-dollars wilt werken en er zeker van bent dat u de formule goed hebt, kunt u het commando vervangen gebruiken om de bestaande prijsvariabele te wijzigen in plaats van een nieuwe aan te maken:
replace price = price*4.14
Voer deze versie uit en u krijgt het bericht (74 echte wijzigingen aangebracht). Gezien het feit dat de dataset 74 waarnemingen heeft, vertelt dit je dat ze allemaal veranderd zijn, zoals je zou verwachten. Zodra u begint met het opnemen van if voorwaarden, hoeveel observaties zijn eigenlijk veranderd kan zeer nuttige informatie zijn.
oefening: Buiten de Verenigde Staten wordt de brandstofefficiëntie vaak gemeten in liters per kilometer (merk op dat, omdat de gebruikte brandstof in de teller zit, een laag getal goed is). Om mijlen per gallon te converteren naar liters per kilometer, vermenigvuldigt u de wederkerigheid van mpg (1 / mpg) met 2,35. Maak een variabele die de brandstofefficiëntie van elke auto opslaat in liters per kilometer.
variabelen aanmaken met If Voorwaarden
Skip to the content volgend op deze video
als een gen commando een if voorwaarde heeft, zal de resulterende variabele (en moet) nog steeds bestaan voor alle waarnemingen. Er zal echter een ontbrekende waarde worden toegekend voor waarnemingen wanneer de if-voorwaarde niet waar is. Als een replace-opdracht een if-voorwaarde heeft, zullen waarnemingen waarbij de if-voorwaarde niet waar is, ongewijzigd blijven. Hiermee kunt u variabelen instellen op verschillende waarden voor verschillende waarnemingen.
stel dat u de vijfpuntsschaal van de variabele rep78 wilt samenvouwen tot een driepuntsschaal. Voeg de volgende code toe aan uw do-bestand om dit te doen:
gen rep3 = 1 if rep78<3
rep3 = 2 If rep78==3
rep3 = 3 if rep78>& rep78<.
de eerste regel maakt de nieuwe variabele rep3, maar stelt deze alleen in op één voor gevallen waarin rep78 minder dan drie is. De anderen worden vermist. De tweede regel verandert sommige van die missingen naar twee, en de derde verandert meer van hen naar drie. Voer het DO-bestand uit, noteer het aantal waarnemingen dat door elke regel is veranderd en vergelijk dat met het totale aantal waarnemingen in de gegevensverzameling.
Wat is de waarde van rep3 voor waarnemingen waarbij rep78 ontbreekt? Vermist, zoals het zou moeten zijn, omdat het nooit op iets anders was ingesteld. De vijf waarnemingen waarbij rep78 ontbreekt werden impliciet Of expliciet uitgesloten van alle drie de commando ‘ s, dus ze begonnen met een ontbrekende waarde voor rep3 en werden nooit gewijzigd. (Als u vergeten bent om ontbrekende waarden uit te sluiten van het laatste commando dan zou rep3 drie zijn voor auto ‘ s waar rep78 ontbreekt, een al te veel voorkomende fout. Vergeet niet, missen is in wezen oneindig.)
oefening: Het combineren van de enen en tweeën is logisch omdat er zo weinig van hen, maar er was geen bijzondere noodzaak om de vieren en vijven te combineren. Maak een rep4 variabele die de enen en twee combineert en renumbers de andere categorieën dienovereenkomstig (dat wil zeggen rep4 moet gaan van één naar vier).
Recode
Skip to the content na deze video
het recode commando geeft u een alternatieve manier om rep3 aan te maken. Het is uitsluitend ontworpen voor het hercoderen van taken en is veel minder flexibel dan gen en vervangen. Maar het is heel makkelijk te gebruiken. De syntaxis is:
Recode var (regel 1) (regel 2) (meer regels indien nodig…), gen (newvar)
de optie gen aan het einde is niet vereist—als het er niet is dan zal de oorspronkelijke variabele worden gewijzigd in plaats van een nieuwe variabele met de nieuwe waarden te maken. U kunt ook recode werk op een lijst van variabelen, hercoderen ze allemaal op dezelfde manier.
de kern van het recode commando is een lijst van regels, elk tussen haakjes, die vertellen hoe een variabele moet worden hercodeerd. Ze hebben de vorm (inputValue = outputValue). De inputValue kan een enkel getal zijn, een lijst met getallen gescheiden door spaties, of een bereik van getallen gespecificeerd met begin/einde. De outputwaarde zal altijd een enkel getal zijn. Alles wat niet door een regel wordt gedekt blijft ongewijzigd, dus je kunt recode gebruiken om slechts een paar waarden van een variabele te veranderen of volledig herdefiniëren zoals we hier doen. Hier is een recode versie van het converteren van rep78 naar een driepuntsschaal:
recode rep78 (1 2 = 1) (3 = 2) (4 5 = 3), gen (rep3b)
ontbrekende waarden vereist geen speciale behandeling: aangezien missing niet in de invoerwaarden van een regel werd vermeld, worden waarnemingen met ontbrekende waarden niet gewijzigd.
oefening: maak rep4b aan, combineer alleen de enen en twee zoals hierboven, met behulp van recode.
Indicatorvariabelen
Skip to the content na deze video
bij het maken van indicatorvariabelen kunt u profiteren van het feit dat Stata true als één behandelt en false als nul door de nieuwe variabele gelijk te stellen aan een voorwaarde. Overweeg:
gen lowMPG =(mpg<20)
(de haakjes zijn optioneel, maar maken het leesbaarder.) Dit creëert een indicator variabele genaamd lowMPG die is een (true) voor auto ‘ s waar mpg is minder dan twintig en nul (false) waar mpg is groter dan of gelijk aan twintig. Om de resultaten te zien, voert u het DO-bestand uit en typt u browse make mpg als lowMPG.
geen enkele auto heeft een ontbrekende waarde voor mpg, maar als dat wel het geval was, zou de bovenstaande code het een nul toekennen voor lowMPG alsof het bekend was dat het een goede gasafstand heeft. De lowmpg variabele moet ontbreken voor dergelijke gevallen, wat u kunt doen met:
gen lowMPG = (mpg<20) als mpg<.
oefening: Maak een indicator variabele die auto ‘ s identificeert met een goede reparatie records (gedefinieerd als rep78 groter dan 3). Hoe zou uw code veranderen als de indicator variabele die nodig is om auto ‘ s die bekend staan om goede reparatie records te identificeren?
String variabelen
Ga naar de inhoud na deze video
De gen en vervang commando ‘ s werken ook met string variabelen. De uitdrukkingen aan de rechterkant van het gelijk-teken zijn niet wiskundig, maar ze volgen vergelijkbare regels. Tekenreekswaarden gaan altijd tussen aanhalingstekens, dus als je de letter x in een variabele genaamd x wilt opslaan, zou je zeggen gen x = “x”. Stata zou dit niet verwarrend vinden (hoewel je dat zou kunnen) omdat x tussen aanhalingstekens (“x”) betekent dat de letter x en x zonder aanhalingstekens betekent dat de variabele x.
toevoeging voor strings is gedefinieerd als het zetten van een string na de andere, dus” abc ” + ” def ” = “abcdef”. Maar het meeste werk met strings wordt gedaan door special-purpose functies die strings als input nemen (ofwel string waarden of variabelen die strings bevatten) en strings als output retourneren.
de make-variabele registreert in feite twee informatiestukken: de naam van het bedrijf dat de auto heeft geproduceerd, en de naam van het automodel. U kunt de bedrijfsnaam eenvoudig extraheren met de functie word ():
gen company = word (make,1)
om de resultaten te zien, voert u het DO-bestand uit en typt u browse make company. De eerste invoer, of argument, voor de functie word() is de string om op te handelen (in dit geval een variabele die strings bevat). Het tweede is een getal dat aangeeft welk woord je wilt. De functie breekt de invoerstring in woorden op basis van de spaties die het bevat en retourneert degene waar u om gevraagd hebt, in dit geval de eerste.
We zullen veel meer zeggen over tekenreeksfuncties in tekstdata (aanstaande), maar als je graag aan de slag wilt, kun je veel doen met alleen de volgende functies:
word() | Extracten van een woord uit een string |
strpos() | je Vertelt als een string een andere tekenreeks bevat, en als dat zo is zijn positie |
substr() | Extracten delen van een tekenreeks |
subinstr() | Vervangt een deel van een tekenreeks met iets anders |
length() | Vertelt je hoe lang een string is (hoe veel tekens bevat) |
help en vervolgens op de naam van een functie in de hoofd stata-venster om te leren hoe het werkt.
oefening: maak een modelvariabele aan met de naam van het automodel (d.w.z. de rest van het merk). Uw code moet modelnamen kunnen verwerken die één of twee woorden lang zijn.
het converteren van String variabelen naar numerieke variabelen
Skip to the content na deze video
soms wordt een variabele die numeriek zou moeten zijn ingevoerd in Stata als een string. Je kunt dat oplossen met het destring commando, dat een string variabele die getallen bevat converteert naar een numerieke variabele. De syntaxis is gewoon destring variable, replace, waar variabele moet worden vervangen door de naam van de variabele (of variabelen) te destringed. Als de string-variabele iets anders bevat dan getallen, kunt u de forceeroptie toevoegen om Stata te vertellen het toch te converteren, maar waarnemingen met niet-numerieke tekens krijgen een ontbrekende waarde. Merk op dat” niet-numerieke tekens “dollartekens en komma’ s bevatten!
in het algemeen, als je de forceeroptie moet gebruiken, is dat omdat Stata niet zeker weet dat wat je doet een goed idee is, en je moet goed nadenken voordat je het doet. In dit geval zou je de niet-numerieke tekens moeten onderzoeken om te zien of het zinvol zou zijn om ze eerst te verwijderen (zoals die dollartekens en komma ‘ s) of als de variabele niet echt alleen getallen is.
deze gegevensset heeft geen variabelen die moeten worden gedesringed, dus laten we er een maken:
gen x = “5”
merk op dat de aanhalingstekens rond “5” betekenen dat x een String variabele is die het karakter 5 bevat, niet een numerieke variabele die de waarde 5 bevat. Gewoon om dingen ingewikkeld te maken, laten we een aantal van de waarden van x veranderen in werkelijke tekst:
replace x = “ontbrekend” als een vreemde
nu probeert x te verwijderen:
destring x, zal replace
Stata weigeren, omdat sommige waarden van x niet naar getallen kunnen worden geconverteerd. Maar de waarden die niet kunnen worden geconverteerd zijn “ontbrekend”, dus het is volkomen gepast om ze te converteren naar ontbrekende waarden. Dus probeer opnieuw met de force optie:
destring x, vervang force
nu zal Stata x converteren naar een numerieke variabele, met enkele ontbrekende waarden.
Egen
Skip to the content na deze video
het egen Commando, kort voor “extended generate” geeft u toegang tot een andere bibliotheek met functies. Het is een beetje een hodge-podge, maar de egen functies die u zult gebruiken de meest berekenen samenvatting statistieken:
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. Ze werken ook over observaties heen, en kunnen dus niet gemakkelijk worden gedaan met behulp van gen, omdat het één observatie per keer werkt. De syntaxis lijkt bijna identiek aan gen:
egen variable = function()
het grote verschil met egen is dat je niet je eigen wiskundige uitdrukking schrijft; Je gebruikt gewoon een functie uit de bibliotheek. Als je bijvoorbeeld een variabele moet instellen op een gemiddelde gedeeld door twee, kun je niet zeggen egen y = mean(x)/2. Je zou in plaats daarvan eerst egen y = mean(x) uitvoeren en dan Y = y/2 vervangen.
een ander belangrijk verschil is hoe met ontbrekende waarden wordt omgegaan. Bedenk dat met gen, als een deel van de input ontbrak de output zou ontbreken. Echter, egen gewoon negeert ontbrekende waarden en berekent het resultaat met behulp van de gegevens die beschikbaar zijn. Meestal is dit wat je wilt, maar je moet je bewust zijn van wat egen doet en er zeker van zijn dat het zinvol is voor uw specifieke taak.
De egen-functies voor het berekenen van samenvattende statistieken worden zeer vaak gecombineerd met by om samenvattende statistieken voor groepen te berekenen. Bereken de gemiddelde autoprijs voor elk bedrijf en bekijk de resultaten met:
bysort company: egen meanPrice = mean(price)
tab company, sum(meanPrice)
bedenk dat bysort company: sorteert eerst de gegevens per bedrijf en voert dan het volgende egen Commando afzonderlijk uit voor elk bedrijf.
de nullen voor de standaardafwijking weerspiegelen het feit dat elke auto die door hetzelfde bedrijf wordt geproduceerd dezelfde waarde van de gemiddelde prijs heeft. Dat komt omdat meanPrice het bedrijf beschrijft, niet de auto. In feite is dat de definitie van een variabele die een groep beschrijft: elke eenheid binnen dezelfde groep moet dezelfde waarde van de variabele hebben.
als we alleen de gemiddelde waarde van de prijs voor elk bedrijf hadden willen zien, hadden we gewoon het volgende kunnen uitvoeren:
tab company, sum (price)
maar na het draaien van egen hebben we nu het gemiddelde in een variabele, beschikbaar voor gebruik.
oefening: maak een variabele met de gemiddelde waarde van rep78 voor elke onderneming. Onderzoek vervolgens de frequenties van rep78 binnen elk bedrijf door het creëren van een tweerichtingstabel met tab. Zorg ervoor dat ontbrekende waarden worden opgenomen. Lincoln en Olds hebben hetzelfde gemiddelde; hoe goed denk je dat dit de verdeling van rep78 voor de twee bedrijven samenvat? Overweeg vervolgens de ontbrekende waarden: stel dat de werkelijke waarde van rep78 voor de auto ‘ s met ontbrekende vales werden onthuld. Wat zouden ze moeten zijn om deze middelen niet te veranderen? Hoe aannemelijk is dat?
Labels
Skip to the content na deze video
goede labels maken uw gegevens veel gemakkelijker te begrijpen en ermee te werken. Hoewel Stata vele soorten labels heeft, richten we ons op de meest voorkomende en meest bruikbare: variabele labels en waarde labels.
variabele Labels
variabele labels geven informatie over een variabele, en kunnen een vervanging zijn voor lange namen van variabelen. Deze dataset heeft al een goede set variabele labels, zoals je kunt zien in het Variables venster. De enige die verwarrend is is het label op foreign, dus verander het met behulp van het label variabele Commando. De syntaxis om een variabel label in te stellen is:
label variabele variablenaam “label”
dus type:
label variabele vreemd “Car Origin”
kijk opnieuw naar het Variabelenvenster om de resultaten te zien.
waarde Labels
waarde labels worden gebruikt met categorische variabelen om u te vertellen wat de categorieën betekenen. We hebben er een in actie gezien met de buitenlandse variabele: het waren de waarde labels die ons vertelden dat een 0 betekent “binnenlands” en een 1 betekent “buitenlands.”
laten we waarde labels verkennen door de waarden van rep3 te labelen, de nieuwe variabele die we hercodeerd hebben om rep78 samen te voegen van een vijfpuntsschaal naar een driepuntsschaal. Waarde-labels zijn een afbeelding van een verzameling gehele getallen naar een verzameling tekstbeschrijvingen, dus de eerste stap is om de afbeelding te definiëren. Gebruik hiervoor het label define Commando:
label define mapName value1 “label1” value2 “label2″…
aldus:
label define replabel 1 ” Bad “2” Average “3”Good”
Dit maakt een toewijzing genaamd replabel, maar past het nergens op toe. Voordat het iets nuttigs doet moet je Stata vertellen om de waarden van de rep variabele te labelen met behulp van de replabel mapping die je zojuist hebt gedefinieerd. De syntaxis is:
label values variabele map
en dus:
label values rep3 replabel
om de resultaten te zien, voer je uit:
list make rep3
zodra een map is gedefinieerd, kun je deze toepassen op een willekeurig aantal variabelen: vervang de enkele variabele in het bovenstaande label values Commando door een lijst met variabelen. Stel dat u met enquêtegegevens werkt en dat uw variabelen het geslacht van de respondent, het geslacht van de echtgenoot van de respondent en het geslacht van alle kinderen van de respondent omvatten. Je zou slechts één kaart kunnen definiëren die gender heet en die dan gebruiken om de waarden van alle gender variabelen te labelen.
drie commando ‘ s voor het beheren van waarde labels: label dir geeft u een lijst van alle gedefinieerde labels, en label list vertelt u wat ze betekenen. Het describe Commando vertelt je de naam van de waarde labels die geassocieerd zijn met elke variabele (en vele andere nuttige dingen).
oefening: Maak waarde labels voor rep4 en pas ze toe. Voel je vrij om te beslissen hoe de niveaus te beschrijven.
Labels via Recode
wanneer u recode gebruikt om een nieuwe variabele aan te maken, zal Stata er automatisch een variabele label voor aanmaken (“RECODE of …”). U kunt ook waarde labels voor het definiëren door het gewenste label voor elke waarde aan het einde van de regel die het definieert. Maak nog een andere versie van rep3, deze keer met labels direct vanaf de creatie, met:
recode rep78 (1 2 = 1 “Bad”) (3 = 2 “Average”) (4 5 = 3 “Good”), gen(rep3c)
oefening: Maak een rep4c met behulp van recode, het instellen van waarde labels voor het.
dit bestand verandert de dataset die het gebruikt, dus het moet de nieuwe versie opslaan. Vergeet niet, sla nooit uw uitvoer over uw invoer, dus sla de nieuwe gegevens niet op als auto. Als je dat deed, kon je dit do-bestand niet opnieuw uitvoeren: het zou crashen wanneer het probeerde price2020 aan te maken omdat die variabele al zou bestaan in de gewijzigde dataset. Sla in plaats daarvan de gegevens op als autoV2, zoals in ” versie 2 van de autogegevensreeks.”
sla autoV2 op, Vervang
tot slot sluit u het logboek:
log close
Dit brengt ons bij het einde van de introductie tot Stata. We hopen dat het u heeft geholpen. Voor meer informatie, overweeg het lezen van data Wrangling in Stata, of de andere inhoud van de SSCC ‘ s Statistical Computing Knowledge Base.
laatst herzien: 5/27/2020