2017-09-16 3 views
-2

reiche ich „Invalid Name“, wenn Sie den folgenden CodeUngültiger Name beim Laufen

foreach i in 2008 2009 2010 2011{ 
disp `"Working in Year `i'"' 
tostring `i', local(yearStr) 
disp `"yearStr"' 
graph bar E if Year=="'i'", c(1) name ('i',replace) 
histogram E if Year=="`i'", c(1) name (`yearStr',replace) 
} 

Was ich versuche ich immer ist Handlung ein Diagramm Bar zwischen den Jahren zu tun und „E“ durch die Jahre der Wahl 2008 2009 2010 2011 aus einem Datensatz, den ich bereits eingegeben habe. Aber wenn ich versuche, den Code auszuführen, wird derselbe Fehler gefunden.

Fehler:

Working on year 2008 
2008 invalid name 
r(198); 
+1

-1 für fehlende Forschung. Einige Ihrer Syntax ist Fantasy-Syntax. Sie müssen die Dokumentation beim Codieren viel genauer studieren. –

+2

Zerstöre deinen Post nicht. – Undo

Antwort

1

Es gibt mehrere Fehler und Missverständnisse hier.

Ihr Code schlägt fehl tostring 2008 als tostring erwartet Variablenname (n). Auch tostring unterstützt keine local() Option, aber Stata kommt nicht so weit. String-Konvertierung wird hier jedoch überhaupt nicht benötigt. Ein Makro ist ein String.

Ihr Code kann als

forval i = 2008/2011 { 
    graph bar E if Year == "`i'", subtitle(`i') name(B`i', replace) 
    histogram E if Year == "`i'", subtitle(`i') name(H`i',replace) 
} 

Einige der Details neu geschrieben werden, die entstehen:

  1. Warnung. Damit dies funktioniert, muss eine String-Variable sein, die an anderer Stelle nicht sinnvoll klingt. Year wäre besser als numerisch.

  2. Syntax. Ich korrigierte die Makro-Interpunktion in verschiedene linke und rechte Anführungszeichen.

  3. Syntax. Ich habe die Option c(1) ausgeschnitten. Was erwartest du das zu tun? Ich kenne keine solche relevante Option. Vielleicht möchten Sie eine Verbindung mit einer Leitung herstellen, die c(l) wäre, außer dass das mit keinem dieser Befehle funktionieren würde.

  4. Stil. Die Absicht Ihres Codes scheint der Inhalt des Makros i zu sein und in ein anderes Makro zu schreiben yearStr. Das ist nicht nötig.

  5. Syntax. name() wird besser ohne Leerzeichen dargestellt, und reine Zahlen können keine gültigen Graphnamen sein.

  6. Absicht. Wie in Ihrem Code der Makros i und yearStr identischen Inhalt haben würden Sie sind durch Zufall versuchen (z) ein Diagramm mit Namen 2008 zu erstellen und dann überschreibt, wie die nächste Kurve, die die gleichen Namen haben würde. Wie oben ist die Syntax in jeder Hinsicht illegal, aber nur unterschiedliche Namen ergeben irgendeinen Sinn.

  7. Grafikstil. Es ist besser, das Jahr als Text auf jede Grafik zu setzen, um zu erklären, was jeder zeigt.

  8. Absicht. Die Zeile di "yearStr" würde nur das Literal yearStr anzeigen. Es würde kein lokales Makro mit diesem Namen anzeigen. (Ich habe die doppelten Anführungszeichen vereinfacht.

    )
Alle

, was gesagt, mit vier Jahren werden Sie wahrscheinlich besser dran mit

graph bar E, by(Year) 
histogram E, by(Year) 

Wenn es jedoch nur einen Wert von E für jedes Jahr, können Sie etwas mehr wollen wie

twoway bar E year, base(0) 
Verwandte Themen