Loop Do-Files

Fragen zu Stata Syntax und Do-Files.

Loop Do-Files

Beitragvon Limerick » Do 27. Feb 2014, 14:33

Hallo,

Ich habe zwei Fragen. Zum ersten: Ich möchte gerne, dass in allen in einem bestimmten Ordner befindlichen *.dta-Dateien eine Variable 1 bzw. auch die Variable 2 zu einem String formatiert wird. Dies ist notwendig, weil ich alle Datensätze darauffolgend mergen will. Kann mir Jemand verraten, wie ich das am besten anstelle?

1.)

local datlist : dir "C:\Ordner Projekte\STATA\Final\dta" files "*.dta"
foreach filename of local datlist {
tostring variable1 variable2 using `filename' , replace
}

Vermutlich ist mein zweites Problem sehr ähnlich. Hier möchte ich gerne in einer Schleife die Ausführung aller in einem Ordner befindlichen do-Files durchführen lassen. Wo ist mein Denkfehler? Ich bekomme ständig die Fehlermeldung "file 1.do not found" - obwohl ein do-File mit dem Namen 1 existiert.

2.)

local dolist : dir "C:\Platzhalter\Ordnername" files "*.do"
foreach file of local dolist {
do `file'
}

Besten Dank!

Limerick
Limerick
 
Beiträge: 5
Registriert: Do 27. Feb 2014, 14:24
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Loop Do-Files

Beitragvon daniel » Do 27. Feb 2014, 15:15

Hm. Im ersten loop fehlt das landen der Datensaätze, ansonsten sieht das gut aus. Du solltest bei beiden loops darauf achten, dass Du Dich im richtigen Verzeichnis befindest. Die extended -dir- function spuckt nur die *.dta Namen aus, nicht das Verzeichnis. Einfach wäre wohl

Code: Alles auswählen
cd  "C:\Ordner Projekte\STATA\Final\dta"
<here go your loops>
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: Loop Do-Files

Beitragvon Limerick » Do 27. Feb 2014, 15:26

Super, vielen Dank!!
Liebe Grüße Limerick
Limerick
 
Beiträge: 5
Registriert: Do 27. Feb 2014, 14:24
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Loop Do-Files

Beitragvon Limerick » Do 27. Feb 2014, 17:20

Hallo,
Es hat sich ein neues Problem aufgetan. Der folgende Code scheint an sich ohne Probleme zu funktionieren. Allerdings steh ich vor einem weiteren Rätsel, was den tostring-Befehl angeht. Und zwar sind in den zu verarbeitenten Datensätzen nicht immer auch alle Variablen wie im Bsp. Var1-3 enthalten. Wenn also Datensatz1 nur Var2 enthält, sollte Stata Var1 und 3 ignorieren, aber in jedem Fall Var2 zu einem String machen. Nach etlichen Testläufen mit entsprechend manipulierten Datensätzen konnte ich jetzt immerhin erschließen, dass mein Problem mit "capture" zusammenhängen muss. Sobald eine der Variablen der Liste nach "tostring" nicht im Datensatz gefunden wird, hört Stata gänzlich auf diesen weiter zu bearbeiten und springt zum nächsten Datensatz. Ich habe hier capture versucht zu verwenden in der Annahme, dass dieser Befehl dazu führt, dass "Fehler" übergangen werden und er trotz der Rückmeldung, dass eine bestimmte Variable nicht gefunden worden sei, im GLEICHEN Datensatz nach den verbleibenden Variablen sucht und ersetzt.

local datlist : dir "C:\Ordner\dta" files "*.dta"
foreach filename of local datlist {
use "C:\Ordner\dta\\`filename'"
capture noisily tostring var1 var2 var3, replace
save, replace
}

Muss ich zu diesem Zweck eine Abfrage mittels "capture confirm var" machen? Und wenn ja, wie müsste das Skript dann lauten?

Besten Dank und viele Grüße

Limerick
Limerick
 
Beiträge: 5
Registriert: Do 27. Feb 2014, 14:24
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Loop Do-Files

Beitragvon daniel » Do 27. Feb 2014, 17:43

-capture- bezieht sich hier auf einen Befehl. Dieser eine Befehl lautet

Code: Alles auswählen
tostring var1 var2 var3, replace


Wenn dieser befehl eine Fehlermeldung zurück gibt, dann wird er nicht ausgeführt. So etwas wie einen Befehlö teilweise ausführen kennt Stata (zu Recht!) nicht. Du kannst hier verschiedene Dinge tun.

Code: Alles auswählen
cap n tostring var1, replace
cap n tostring var2, replace
cap n tostring, var3, replace


wäre eine Möglichkeit.
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


Zurück zu Stata Syntax

Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 6 Gäste

cron