Import mehrerer Excel Dateien gleichzeitig

Fragen zu Stata Syntax und Do-Files.

Re: Import mehrerer Excel Dateien gleichzeitig

Beitragvon daniel » Mo 10. Sep 2012, 15:39

Schau zuerst mal nach, ob es bereits entprechende Pakete gibt, die Du als Ausgangspunkt verwenden kannst.

Code: Alles auswählen
findit mmerge
findit mergemany


Ich habe mein Programm nocheinmal erweitert, und als -xls2dta- veröffentlicht. Es [sollte innerhalb der nächsten Woch] ist ab heute vom SSC installierbar sein.

Code: Alles auswählen
ssc inst xls2dta


-xls2dta- speichert die Namen der umgewandelten Datensätze in r(). Ein loop zum -merge-n (oder -append-en) der files sollte dann relativ einfach umzusetzen sein.
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: Import mehrerer Excel Dateien gleichzeitig

Beitragvon domibrown » Di 11. Sep 2012, 09:19

Herzlichen Glückwunsch, ihr Programm funktioniert hervorragend :)
domibrown
 
Beiträge: 18
Registriert: Do 6. Sep 2012, 09:34
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Import mehrerer Excel Dateien gleichzeitig

Beitragvon domibrown » Di 18. Sep 2012, 11:21

Hallo Jungs,

ich habe eine kleine weitere Frage, die ich auch nach ewigem gesuche im Internet/Help files/etc. nicht lösen konnte. In einem Ordner habe ich viele verschiedene .dta files der gleichen Form. Mit dem untenstehenden Code kann ich die Files zu zusammen-append-en und anschließend fehlende Values der Variable "tnnr" direkt aus dem Datensatz löschen. Soweit alles bestens ...

Im nächsten Schritt wird eine Variable (dup) generiert, die doppelte Werte von "tnnr" angibt. Sofern "tnnr" mehrmals den gleichen Wert annimmt, ist der zugehörige "dup" Wert > 0. Ich schaffe es leider nicht nun den folgenden If / Else Befehl zu integrieren:

Falls dup > 0, dann unterbreche das do file und gib eine fehlermeldung "Fehlermeldung xyz" aus
Falls dup = 0, dann drop dup

Code: Alles auswählen
clear
cd "$Imported_FeedbackI"
qui fs *
foreach f in `r(files)' {
append using `f'
}
** sort and remove values matching a missing ID **
sort tnnr
gen Empty=1 if tnnr == .
drop if Empty == 1
drop Empty

** remove duplicated ID values ** 

quietly by tnnr:  gen dup = cond(_N==1,0,_n)


Vielleicht hat jemand eine Idee, wie ich das umsetzen muss. Es ist mit Sicherheit ziemlich einfach :D

lg domi
domibrown
 
Beiträge: 18
Registriert: Do 6. Sep 2012, 09:34
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Import mehrerer Excel Dateien gleichzeitig

Beitragvon daniel » Di 18. Sep 2012, 12:01

Ich verstehe nicht ganz was Sinn und Zweck der Übung ist, aber ich glaube, Du hast auch Verständnisschwierigkeiten.

Falls dup > 0, dann unterbreche das do file und gib eine fehlermeldung "Fehlermeldung xyz" aus
Falls dup = 0, dann drop dup


Wie du selbst schreibst, ist <dup> eine Variable (i.e. ein Vektor). Du willst mit Deiner Bedingunge aber scheinbar einen scalar (i.e. den einen Wert von <dup>) prüfen. Das passt nicht zusammen.
Zuletzt geändert von daniel am Di 18. Sep 2012, 12:10, insgesamt 1-mal geändert.
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: Import mehrerer Excel Dateien gleichzeitig

Beitragvon domibrown » Di 18. Sep 2012, 12:09

Ja ich hab mit Sicherheit Verständigungsschweirigkeiten! Stata hab ich vor 2 Wochen zum ersten Mal gesehen und mit Außenwirtschaft und Entwicklungstheorie sind Stata Programme generell nicht so meine Steckenpferde :)

Was ich eigentlich hinbekommen möchte ist, dass in der -append-eten Datei die Variable tnnr auf doppelte Werte gecheckt werden. Sollten doppelte Werte auftauchen muss das do file anhalten und den Anwender über doppelte Werte informieren. (Es handelt sich zwingend um einen schwerwiegenden Eingabefehler)

Leider sind meine Formulierungen leider manchmal unpräzise :D Tendenziell weil ich nicht genügend Ahnung habe :( Ich lerne aber dazu :lol:
domibrown
 
Beiträge: 18
Registriert: Do 6. Sep 2012, 09:34
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Import mehrerer Excel Dateien gleichzeitig

Beitragvon daniel » Di 18. Sep 2012, 12:19

Ok, verstehe. Etwas in der Richtung?

Code: Alles auswählen
qui duplicates <tnnr> r
if (r(unique_value) != r(N)) {
    di as err "duplicates found in <tnnr>"
    e 459
}


Möglich ist auch

Code: Alles auswählen
qui levelsof <tnnr> ,l(lvls)
if ("`: list dups lvls'" != "") {
    di as err "duplicates found in <tnnr>"
    e 459
}


Alternativ kann man natürlich auch die Duplikate anzeigen lassen.
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: Import mehrerer Excel Dateien gleichzeitig

Beitragvon domibrown » Di 18. Sep 2012, 13:49

Der Code liefert im prinzip genau das gesuchte Ergebnis. Ich bin auch mit riesigem Suchaufwand nicht auf den Befehl unique_value gestoßen. :/

Ist mir anzeigen der Duplikate gemeint, dass man eine Fehlermeldung mit genauem Wert (bspw. wert 35 (für tnnr) ist 4 mal vergeben ) abgezeigt bekommt? Ohne das ich dir jetzt damit auf die Nerven gehen will, aber wenn man zum Anzeigen der Duplikate nur die Befehlszeile:

Code: Alles auswählen
di as err "duplicates found in tnnr"


ändern musst, würd ich mich dafür interessieren :)

trotzdem nochmal danke für die schnelle Hilfe.

lg domi
domibrown
 
Beiträge: 18
Registriert: Do 6. Sep 2012, 09:34
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Import mehrerer Excel Dateien gleichzeitig

Beitragvon daniel » Di 18. Sep 2012, 14:38

Zunächst zu r(unique_value). Stata Befehle geben häufig Resultate zurück, auf die man zugreifen kann. Nach -summarize- stehen einem in r() z.B. der Mittelwert, u.a. Kennwerte zur Verfügung. Bei den meisten befehlen, die etwas zurückgeben ist das im helpfile dokumentiert -- das ist bei -duplicates- nicht der Fall. Gibt man nach dem -duplicates- Befehl aber -return list- ein, bekommt man eine Anzeige aller in r() gespeicherten werte, darunter auch r(unique_value).

Zur zweiten Frage lies Dir einfach mal das helpfile zu -duplicates- durch und experimentier mal mit den Unterbefehlen rum. Wenn Du nur dann die Ausgabe willst, wenn etwas nicht passt, dann könntest Du den code etwas so schreiben

Code: Alles auswählen
qui duplicates r <tnnr>
if (r(unique_value) != r(N)) {
    duplicates <subcommand> <tnnr>
    e 459
}


Dabei ersetzt Du <subcommand> durch das subcommand, das Dir den gewünschten output erzeugt.
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: Import mehrerer Excel Dateien gleichzeitig

Beitragvon domibrown » Mi 19. Sep 2012, 14:18

Hallo,

ich hab noch eine kleine Frage die ich erneut nicht so richtig hinbekomme. Wenn ich es richtig verstanden habe, dann ermöglicht mir folgender Code, dass jedes .dta-file im Ordner (global) "Imported FeedbackI" nacheinander aufgerufen wird.

Code: Alles auswählen
cd "$Imported_FeedbackI"
qui fs *.dta
foreach f in `r(files)' {
}


Allerdings schaffe ich es nicht, in jedem .dta-File eine Variable (zb. gen test=1) mit einem festgelegten Wert zuzuordnen. der Befehl in Klammern lässt sich leider nicht hinter die geschwungenen Klammer in obigem Code (hinter "foreach f in `r(files)') einbinden.

Weis da jemand einen Rat?

lg domi
domibrown
 
Beiträge: 18
Registriert: Do 6. Sep 2012, 09:34
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Import mehrerer Excel Dateien gleichzeitig

Beitragvon daniel » Mi 19. Sep 2012, 17:40

Was verstehst du unter "aufrufen"? Was genau funktioniert, bie welchem Befehl nicht, oder: Was genau hast Du getippt, und ausgeführt, und was genau hat Stata geantwortet/gemacht?
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

VorherigeNächste

Zurück zu Stata Syntax

Wer ist online?

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