2012-04-08 14 views
2

1) Ist es möglich, einen Vektor von Strings in Stata zu erstellen? 2) Wenn ja, ist es dann möglich, die Elemente in diesem Vektor durchzulaufen und Befehle für jedes Element auszuführen?Wie kann ich Dateinamen in Stata durchlaufen

Um eine einzelne Saite in Stata erstelle ich weiß, Sie tun dies:

local x = "a string" 

Aber ich habe über 200 Datendateien, die ich in einer Schleife müssen durch, und sie sind nicht bequem mit aufeinander folgenden Suffixe wie „_2000“ genannt "_2001" "_2002" usw. In der Tat gibt es keinen Reim oder Grund zu den Dateinamen, aber ich habe eine Liste von ihnen, die ich leicht in einen Schnurvektor schneiden und einfügen konnte, und dann die Elemente dieses Vektors eins nenne zum einen, wie man es in MATLAB tun könnte.

Gibt es eine Möglichkeit, dies in Stata zu tun?

Antwort

4

Sicher - Sie erstellen nur eine Liste mit einem typischen lokalen Anruf. Wenn Sie das Ganze nicht in Anführungszeichen setzen, können Ihre Listen sehr lang sein.

local mylist aaa bbb "cc c" dd ee ff 

Dann einfach Sie foreach verwenden.

foreach filename of local mylist { 
    use `"`filename'"' 
} 

Die doppelten Anführungszeichen (`" "') verwendet werden, da einer der Dateinamen in Anführungszeichen hat es wegen des Raumes. Dies ist eine Berührung schneller als foreach filename in `mylist' { in der ersten Zeile setzen.

Wenn Sie Ihre Liste bearbeiten möchten, siehe help macrolists.

ähnliche Fragen wurden gebeten,> 1 auf Stackoverflow:

+0

Dies wird nicht funktionieren, wenn Sie zum Beispiel "lokale Mylist" aa "bbb" cc c "dd ee" ff "' haben, weil die äußeren Anführungszeichen entfernt werden: http://www.stata.com/ statalist/archive/2012-10/msg00285.html – katriel

5

Oben Keith Antwort: Sie auch die Liste der Dateien in einem Verzeichnis bekommen mit

local myfilelist : dir . files "*.dta" 

oder allgemeiner

local theirfilelist : dir <directory name> files <file mask> 

Siehe help extended_fcn.

3

Was viele Leute wollen die Kombination der beiden, wie ich es getan habe. Hier ist es:

* Create a local containing the list of files. 
local myfilelist : dir "." files "*.dta" 

* Or manually create the list by typing in the filenames. 
local myfilelist "file1.dta" "file2.dta" "file3.dta" 

* Then loop through them as you need. 
foreach filename of local myfilelist { 
    use "`filename'" 
} 

Ich hoffe, dass hilft. Beachten Sie, dass Locals/Makros durch 67,784 characters begrenzt sind - achten Sie darauf, wenn Sie eine wirklich lange Liste von Dateien oder wirklich lange Dateinamen haben.

+0

Informationen hier über die maximale Makrolänge sind sehr veraltet, es sei denn, Ihre Stata selbst ist sehr veraltet. Konsultieren Sie 'help limits' in Ihren Stata für das, was für Sie gilt. –

Verwandte Themen