Stata 6: Mit tegyek, ha a szükséges parancs nem használható a by-val?
Title | Stata 6: while hurkok használata, ha a by parancs nem választható | |
szerző | Jeremy B. Wernow, StataCorp |
számos olyan parancs van a Stata-ban, amely nem engedélyezi a by parancsot opcióként. Két példa a tab1 parancs és a graph parancsok a saving () opcióval. Ennek a funkciónak az egyik módja az, ha a végrehajtani kívánt parancsot egy while hurokba helyezi:
Ez nem működik. Tudjuk azonban, hogy a rep78 értéke 1 és 5 között van, ezért próbáljunk ki egy while ciklust egy do-fájlban:
local i = 1 while `i' <=5 { tab1 mpg price if rep78 == `i' local i = `i' + 1 }
itt van a fájl végrehajtásának kimenete:
mi van, ha a rep78-nak hiányzik az értéke? Ebben az esetben az egen paranccsal létrehozhat egy új változót, amely kategorizálja az egyes értékeket a rep78-ban.
itt van a módosított do-fájl:
local i = 1 egen y = group(rep78), missing while `i' <=6 { tab1 mpg price if y == `i' local i = `i' + 1 }
a hiányzó opció használatával az egen paranccsal a rep78 hiányzó értékei 6 értékkel lesznek kódolva (emlékezve arra, hogy a rep78 értéke 1-5). Vegye figyelembe, hogy a do-fájl kimenete mostantól tartalmazza az mpg táblázatait, valamint a rep78 hiányzó értékeinek árát is.
most térjünk át egy nehezebb példára. A felhasználó a közelmúltban a graph paranccsal és a saving() opcióval akarta használni a by parancsot.
by nem használható a graph, saving() opcióval az elnevezési problémák miatt (hogyan nevezné el az egyes grafikonokat?). Ez megoldható egy másik do-fájllal:
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 }
ennek a do-fájlnak a kimenete
ami úgy működött, ahogy szerettük volna.
sok mindent lehet tenni ezzel a koncepcióval. Végső és még összetettebb példaként ugyanaz a felhasználó azt is mondta, hogy a by() opciót a saving() opcióval szeretné használni, ábrázolva azokat egy másik változóval szemben, és ezt a változók listájához kellett elvégeznie. Ez elsőre talán zavarónak hangzik (és az is volt). Lényegében szükségünk volt
by var1: graph var2 var3, megtakarítás (graph) by(var4)
Több különböző változót kellett használni a var3 helyett.
a megoldás az, hogy a for parancsot egy while cikluson belül használjuk. Itt van egy példa az automatikus adatkészlet használatával:
ennek eredménye