Frage

Ich bin immer ungeradees Verhalten aus der folgenden Schleife (es nur erzeugt Werte fehlt) -

  

foreach x von varlist Namen {egen   totalcapx'=total(cap) if unit!=0 & name=="x '“, von (Jahr)}

Aber wenn ich nur tun

  

egen totalcapSOMENAME = Gesamt (Cap), wenn   Einheit! = 0 & name == "Somename", von (Jahr)

dann berechnet er die Zahlen, die es angenommen hat, zu berechnen.

Dies ist eine Paneldatensatzes, Stücknummer innerhalb eines Triebwerks einer bestimmten Generatoreinheit bezeichnet (Einheiten nummeriert 0 Werksebene Beobachtungen). Die Kappe ist variable Kapazität installiert. Der Name Variable identifiziert die Pflanze. Es ist kompliziert zu erklären, warum ich diese Schleife brauche, aber das Problem ist eindeutig mit der Art und Weise STATA foreach interpretiert.

War es hilfreich?

Lösung

Sie haben ein paar Probleme hier. Am wichtigsten ist, Ihre erste Schleife prüft das Wort „Namen“ anstelle von „x“ in Ihrer Schleife. So ist es läuft Ihr -egen- Befehl wie:

foreach x of varlist name {
     egen totalcapname = total(cap) if unit!=0 and name=="name", by(year)
}

Ich bezweifle, das ist, was Sie wirklich wollen - ich glaube, Sie es von jedem Punkt (Beobachtung) in Ihrem „name“ Variable auswerten möchten, da Sie die if-Anweisung verwendete Name == „x'". So, you need to either get rid of the double quotes around the "x '“ in Ihrem -if- Anweisung oder setzen ein lokales Makro und stellen Sie die egen Schleife nach oben für jedes Element in Ihrem „name“ Variable zu bewerten.

Der zweite Fehler, den ich in Ihrem Code zu sehen ist, dass Sie das nach vorne oder links Angebot für die „x“ in der Schleife fehlen - es sollte lauten „` x ‚“, nicht „x‘“

.

Hier ist ein Beispiel dafür, was ich denke, Sie ausführen möchten. Zur Verdeutlichung ich die Stata bin mit in-built „auto.dta“ Dataset Ihren Loop & eigenständige -egen- Anweisung auszuführen ... Bitte beachten Sie, dass ich die Variablen in der auto.dta den Namen Ihrer Variablen umbenennen:

***********
clear
sysuse auto


**
//this section renames the auto.dta variables to the name of your variables//

gen year = [_n]
rename mpg cap
rename price unit
rename make name
**NOTE:  your "SOMENAME" will be "Subaru" in this example!**
**

//here's the loop you should be running//

foreach x of varlist name {
 egen totalcap`x'=total(cap) if unit!=0 & name==`x', by(year) 
 }

//without the loop//

egen totalcapSOMENAME=total(cap) if unit!=0 & name=="Subaru", by(year)

//Display the results//

li name unit cap totalcap* if !missing(totalcapSOMENAME)
***********

Versuchen Sie dieses Beispiel in einer Stata do-Datei ausgeführt wird. Auch wenn Sie diese Art von Fragen haben (wo die Schleife zu einem anderen Ergebnis erzeugt als der Stand-alone-Befehl), immer versucht -Set Spuren on- eingeben, so dass Sie sehen, wie Stata Ihre Schleife prüft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top