Stata 6: Wat moet ik doen als het commando waarmee ik nodig heb niet gebruikt kan worden?
Title | Stata 6: while loops gebruiken als het by-Commando geen optie is | auteur | Jeremy B. Wernow, StataCorp |
Er zijn verschillende commando ‘ s in Stata die het by commando niet als optie toestaan. Twee voorbeelden zijn het tab1 commando en de graph commando ‘ s met de saving() optie. Een manier om deze functie te omzeilen is door het commando dat u wilt uitvoeren in een while loop te plaatsen:
dat niet werkt. We weten echter dat rep78 waarden heeft tussen 1 en 5, dus laten we een while loop proberen in een do-bestand:
local i = 1 while `i' <=5 { tab1 mpg price if rep78 == `i' local i = `i' + 1 }
Hier is de uitvoer van het uitvoeren van dit bestand:
Wat als rep78 ontbrekende waarden heeft? In dit geval kunt u het egen commando gebruiken om een nieuwe variabele te maken die elke waarde in rep78 categoriseert.
Hier is het gewijzigde do-bestand:
local i = 1 egen y = group(rep78), missing while `i' <=6 { tab1 mpg price if y == `i' local i = `i' + 1 }
door gebruik te maken van de ontbrekende optie met het egen Commando, worden de ontbrekende waarden van rep78 gecodeerd met een waarde van 6 (onthoud dat rep78 waarden heeft van 1 tot 5). Merk op dat de output van deze do-bestand zal nu tabulaties voor mpg en de prijs voor de ontbrekende waarden van rep78 ook bevatten.
laten we nu overgaan tot een moeilijker voorbeeld. Een gebruiker wilde onlangs het by commando gebruiken met het graph commando en de saving () optie.
by kan niet gebruikt worden met de graph, saving() optie vanwege naamgevingskwesties (hoe zou je elke afzonderlijke grafiek een naam geven?). Dit kan opgelost worden met een ander do-bestand:
local i = 1 egen y = group(rep78), missing while `i' <=6 { graph mpg price if y == `i', saving(graph`i',replace) local i = `i' + 1 }
De uitvoer van dit do-bestand is
die precies werkte zoals we wilden.
er is veel dat je kunt doen met dit concept. Als laatste en nog complexer voorbeeld, zei dezelfde Gebruiker ook dat hij de optie by() wilde gebruiken met de optie saving (), waarbij hij die tegen een andere variabele wilde grafieken, en hij moest dit doen voor een lijst met variabelen. Dit klinkt waarschijnlijk verwarrend op het eerste (en het was). In wezen moesten we
door var1: grafiek var2 var3, opslaan(graph) door (var4)
verschillende variabelen moesten worden gebruikt in plaats van var3.
de oplossing is om een for commando te gebruiken binnen een while lus. Hier is een voorbeeld met behulp van de automatische dataset:
Dit resulteert in