Automatisieren von Prozessen

Fragen zu Stata Syntax und Do-Files.

Automatisieren von Prozessen

Beitragvon thomthom » Fr 18. Mai 2012, 16:06

Hi,
ich möchte ein *.do file automatisch für 31 Datensätze durchlaufen lassen ohne das per hand zu machen. Gibt es da eine möglichkeit?
Meine Idee wäre gewesen das über eine Schleife zu machen, haut aber nicht hin:
Code: Alles auswählen
foreach var of varlist KO COKE CTB{
use "C:\dta\`var'.dta"
keep in 2/2520
scatter tren zeit, msize(small) msymbol(circle) xlabel(, valuelabel)
graph export "Abb1_xxx.png", replace
......
}


Gibt es zudem eine möglichkeit, dass wenn des automatisch durchgeführt wird, stata bei graph export stat den xxx automatisch den Namen des zurzeit verarbeiteten datensatzes einsetzt?
Sprich er Stata soll den datensatz öffnen und den namen des geöffneten datensatzes für die xxx einsetzen, wie es bei schleifen `var' macht. (praktisch einen dynamischen platzhalter für den dateinamen oder Dateilabel)

wäre froh um jeden Ansatz bzw. tipp wo ich nachschaun kann wie des umgesetzt wird

lg und schönes Wochenende
thom thom
thomthom
 
Beiträge: 16
Registriert: Fr 13. Apr 2012, 17:03
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Automatisieren von Prozessen

Beitragvon daniel » Fr 18. Mai 2012, 18:41

haut aber nicht hin

Geht es vielleicht etwas spezifischer?

Hier mal ein paar Dinge.

Code: Alles auswählen
foreach var of varlist KO COKE CTB{

spezifiziert, dass KO COKE CTB eine Liste von Variablennamen ist. Dazu müsste dann bereits ein Datensatz geöffnet sein, der diese Variablen enthält. Ich tippe mal, dass es sich hier nicht um Variablennamen, sondern um Datensatznamen handelt. Du willst also wohl etwas in der Richtung

Code: Alles auswählen
foreach x in KO COKE CTB{


Code: Alles auswählen
use "C:\dta\`var'.dta"
keep in 2/2520


Kann problematisch sein, falls "......" in Deinem code Veränderungen am Datensatz bewirkt. Besser ist vielleicht

Code: Alles auswählen
use in 2/2520 using "C:\dta\`x'.dta"  ,clear


Der -in- qualifier sollte schneller sein, als Dein separater -keep- Befehl, wichtiger ist aber die -clear- Option.

Den plot würde ich -quietly- erstellen, Du willst ja beim Durchlauf nicht 31 Grafiken sehen.

Gibt es zudem eine möglichkeit, dass wenn des automatisch durchgeführt wird, stata bei graph export stat den xxx automatisch den Namen des zurzeit verarbeiteten datensatzes einsetzt?


Ja, genau analog zum Laden der Datensätze. Ersetze xxx durch `x'.
Stata is an invented word, not an acronym, and should not appear with all letters capitalized: please write “Stata”, not “STATA”.
daniel
 
Beiträge: 1060
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Automatisieren von Prozessen

Beitragvon thomthom » Sa 19. Mai 2012, 08:20

Guten morgen,
herzlichen dank erstmal für die Tipps, haben mir schon wieder ein großes stück weitergeholfen, solangsam freunde ich mich mit stata an :)

Gibt es generell eine Möglichkeit dynamische Platzhalter in stata einzusetzen? Sprich ich hab ein do file und mochte wenn ich es laufen lasse, dass er mir für x immer den aktuellen labelnamen des datensatzes einsetzt. ohne dass ich jedesmal von hand was ändern muss:
Code: Alles auswählen
label data "KO"
graph export "Abb_1_x.png"

Mir ist klar, dass ich x als platzhalter für den labelnamen definieren muss aber ich finden leider keinen entsprechenden syntax.


Irgendwie scheint leider die Lösung mit den Schleifen nicht ganz hinzuhauen:
Code: Alles auswählen
foreach x in KO COKE CTB{
use in 2/2520 using "C:\dta\`x'.dta"
quietly scatter tren zeit, msize(small) msymbol(circle) xlabel(, valuelabel)
graph export "Abb1_`x'.png", replace
......
}


Produziert mir die Fehlermeldung :
Code: Alles auswählen
use in 2/2520 using "C:\dta\`x'.dta"
file C:\dta\`x'.dta not found
r(601);

end of do-file



ich vermute mal, dass stata das `x' im Dateipfad nicht als variable sondern als filenamen `x' ansieht und des findet er logischerweise nicht, da es ja KO.dta heißen sollte.

Ist es grundsätzlich eigentlich möglich mit schleifen mehrere Datensätze nacheinander zu bearbeiten bzw. hat damit wer erfahrung? und gibt es alternativen?

mit freundlichen Grüßen
thomthom
thomthom
 
Beiträge: 16
Registriert: Fr 13. Apr 2012, 17:03
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Automatisieren von Prozessen

Beitragvon daniel » Sa 19. Mai 2012, 12:17

Gibt es generell eine Möglichkeit dynamische Platzhalter in stata einzusetzen?

Siehe -help macro-. In diesem Beispiel

Code: Alles auswählen
loc x KO
label data "`x'"
graph export "Abb_1_`x'.png"


Die von Dir angegebenen Fehlermeldung schint mir sehr merkwürdig. Hier scheint etwas mit der macro Substitution nicht zu klappen. Für `x' sollte hier der jeweilige Inhalt (KO, COKE, CTB) eingesetzt werden. Wenn ich das laufen lasse (mit entprechend erzeugten Dateinamen) dann klappt es einwandfrei. Check mal bitte folgende Punkte

1. Die Zeichen ` und ' sind die korrekten. `ist eibn dead-key, der durch Drücken der Shift Taste gefolgt von der Taste rechts neben dem ? liegt. Das ' wird durch Shift und # erzeugt.
2. Die -foreach- Schleife wird in einer Umgebung (do-file oder interactive session) ausgeführt. Dass die einzeln ausgeführte Zeile
Code: Alles auswählen
use in 2/2520 using "C:\dta\`x'.dta"

eine Fehlermeldung produziert sollte Dich nicht überraschen, da der Inhalt des -local-s x nicht definiert ist. Selbst damnn würde ich allerdings eine andere Fehlermeldung erwarten. Ist die wirklich genau so aus Stata kopiert?
3. Die Datensätze liegen alle im angegebenen Verzeichnis.

Wenn hier alles in Ordnug ist, fällt mir gerade ein, dass der (Windows übliche) backslash bei der -macro- Substitution stören kann (delayed macro substitution). Ersetze mal alle backslahes (\) im Dateipfad durch slashes (/).
Stata is an invented word, not an acronym, and should not appear with all letters capitalized: please write “Stata”, not “STATA”.
daniel
 
Beiträge: 1060
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Automatisieren von Prozessen

Beitragvon thomthom » Sa 19. Mai 2012, 14:38

daniel hat geschrieben:Wenn hier alles in Ordnug ist, fällt mir gerade ein, dass der (Windows übliche) backslash bei der -macro- Substitution stören kann (delayed macro substitution). Ersetze mal alle backslahes (\) im Dateipfad durch slashes (/).


Genau das war das Probem, ausgetauscht und lief einwandfrei.

Vielen Dank
thomthom
 
Beiträge: 16
Registriert: Fr 13. Apr 2012, 17:03
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post


Zurück zu Stata Syntax

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

cron