Einlesen mehrere Excel-Files via Schleife

Fragen zu Stata Syntax und Do-Files.

Einlesen mehrere Excel-Files via Schleife

Beitragvon trumpmilit » Do 7. Aug 2014, 16:44

Schönen Nachmittag,
ich arbeite an meinem ersten Projekt in Stata: ich habe folgendes Problem: Ich möchte mehrere (ca. 200) Excel Dateien in Stata einlesen, um alle zu bearbeiten und als .dta abzulegen. Die Namen der Files sind Zahlen - allerdings nicht fortlaufend (sie sollen auch so bleiben, da ich diese Information für spätere merge-Befehle brauche) - also zB 1.xls, 3.xls, 4.xls, 10.xls.... Nun stellt sich die Frage, wie ich alle diese Files in die Schleife bringe? Mein Ansatz war so:

Code: Alles auswählen
foreach j of numlist 1 (1) 199 {
import excel using `j', clear
do "Bearbeitung.do"
save `j', replace
}


Diese Schleife hängt natürlich schon beim ersten Sprung (zB von 1 auf 3). Wie kann ich das überspringen - bzw. gibt es eine Möglichkeit bei foreach, dass zB zuerst im Verzeichnis alle Namen der Excel Dateien eingelesen werden?

Besten Dank im Voraus.
Johannes
trumpmilit
 
Beiträge: 3
Registriert: Do 7. Aug 2014, 16:33
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Einlesen mehrere Excel-Files via Schleife

Beitragvon daniel » Do 7. Aug 2014, 17:59

Kopiere alle xls files, die Du bearbeiten willst - und nur diese - in eine Verzeichnis (sagen wir c:/myxlsfiles).

Code: Alles auswählen
loc xlsfiles : dir "c:/myxlsfiles" file "*.xls"
foreach fn of loc xlsfiles {
    import excel using `"`fn'"' ,clear
    do "c:/<whereeverBearbeitung.doissaved>/Bearbeitung.do"
    loc dtaname : subinstr loc fn ".xls" ".dta"
    sa `"`dtaname'" ,replace
}


Schau Dir dazu -help extended_fcn- an. -xls2dta- (SSC) mach ebenfalls hilfreichsein, wobei dieses Program alle files in Stata files umwandelt, ohne sie zu bearbeiten. Die Bearbeitung müsset also nachgeschaltet werden.
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: Einlesen mehrere Excel-Files via Schleife

Beitragvon trumpmilit » Do 7. Aug 2014, 18:55

Recht herzlichen Dank, funktioniert einwandfrei.

Eine kleine Frage hätte ich noch, mit den Anführungszeichen bin ich noch nicht vertraut, wie ich sehe (oder es ist ein anderes Problem):

Wenn ich in der Schleife noch eine Variable ändern will, geht das nicht so:

Code: Alles auswählen
loc xlsfiles : dir "c:/myxlsfiles" file "*.xls"
foreach fn of loc xlsfiles {
    import excel using `"`fn'"' ,clear
    do "c:/<whereeverBearbeitung.doissaved>/Bearbeitung.do"
    [b]replace A = `"`fn'"'[/b]
    loc dtaname : subinstr loc fn ".xls" ".dta"
    sa `"`dtaname'" ,replace
}


grs: für strings/Pfade wird: "STRING" verwendet - bei Zugriff auf Variablen doch: `VAR' - was bedeutet jetzt dieses `"`VAR'"' - ist das für local Variablen. Beim obigen REPLACE erhalte ich: "type mismatch".
trumpmilit
 
Beiträge: 3
Registriert: Do 7. Aug 2014, 16:33
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Einlesen mehrere Excel-Files via Schleife

Beitragvon daniel » Do 7. Aug 2014, 22:48

Du versuchst in Variable A eine Zeichenkette, nämlich den Namen des jeweiligen Excel Datensatzes zu schreiben. Aus welchem Grund?

Der Fehler resultiert vermutlich daraus, dass A eine numerische Variable ist.
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: Einlesen mehrere Excel-Files via Schleife

Beitragvon trumpmilit » Mo 11. Aug 2014, 11:33

ja, ganz genau. Aber ich brauche diese Information der FN, sie dienen als Info für einen späteren merge-Befehl.

hier meine Lösung - sicher kein guter Stil, aber es funktioniert:

Code: Alles auswählen
foreach fn of loc xlsfiles {
    import excel using `"`fn'"' ,clear
    do "C:\PFAD\Bearbeitung.do"
   tostring A, replace
   replace A = `"`fn'"'
   replace A = subinstr(countrygroup, ".xls", "", 1)
   destring A, replace force
    loc dtaname : subinstr loc fn ".xls" ".dta"
   sa `"`dtaname'"' ,replace
}


Danke nochmals für die Hilfe.
trumpmilit
 
Beiträge: 3
Registriert: Do 7. Aug 2014, 16:33
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 3 Gäste

cron