Seite 1 von 1

Datenbereinigung

BeitragVerfasst: Do 25. Apr 2013, 14:55
von Flachzange
Hallo,

ich möchte meinen Datensatz um 0-Renditen bereinigen. Als Variablen habe ich Firmen und Renditen. Pro Unternehmen sollen die 0-Renditen von Beginn bis Ende gelöscht werden. Hier ein Beispiel:
Firm Year Renditen
1 2000 1
1 2001 0
1 2002 0
1 2003 0
2 2000 1
2 2001 2
2 2002 3
2 2003 0
Für das Unternehmen 1 soll ab 2001 bis 2003 und für Unternehmen 2 ab 2003 die 0-Renditen gelöscht werden.
Kommt man da überhaupt mit dem Befehl tsspell weiter?

Re: Datenbereinigung

BeitragVerfasst: Do 25. Apr 2013, 22:32
von daniel
Was heißt "die 0-Renditen löschen"? Die Zeilen, in denen die Rendite 0 ist aus dem Datensatz entfernen, oder die 0er mit missing values ersetzen.

In beiden Fällen ist eine Durchführung "pro Unternehmen" überflüssig.

Code: Alles auswählen
drop if !Renditen


oder

Code: Alles auswählen
replace Renditen = . if !Renditen


erfüllt den Zweck.

Sollte etwas anderes gewünscht sein, reformuliere bitte die Frage.

Re: Datenbereinigung

BeitragVerfasst: Fr 26. Apr 2013, 09:33
von Flachzange
Die 0-Renditen am Ende sollen entfernt, also als missing values ersetzt werden. Falls eine 0-Rendite zwischendrin vorkommt soll diese aber nicht ersetzt werden: Bsp:
u1 2001 1
u1 2002 0
u1 2003 1
u1 2004 0
u1 2005 0
u1 2006 0

Ersetzen ab 2004 bis 2006.

Re: Datenbereinigung

BeitragVerfasst: Fr 26. Apr 2013, 12:37
von daniel
Ok.

Code: Alles auswählen
g foo = -Year
bys Frim (foo) : replace Rendite = . if !Rendite & !(sum(Rendite >= 1))
so Firm Year
drop foo

Re: Datenbereinigung

BeitragVerfasst: Fr 26. Apr 2013, 13:20
von Flachzange
Hat leider nicht funktioniert. Stata ersetzt alle 0-Renditen durch missings. Habe schon versucht einen Syntax mit tsspell zu erstellen, das funktioniert aber auch nicht.

Re: Datenbereinigung

BeitragVerfasst: Fr 26. Apr 2013, 14:25
von daniel
Stata ersetzt alle 0-Renditen durch missings.


Nein, definitiv nicht alle! Bei 2002 bleibt die 0, wie von Dir gewünscht, stehen.

Code: Alles auswählen
clear
inp Firm Year Rendite
1 2001 1
1 2002 0
1 2003 1
1 2004 0
1 2005 0
1 2006 0
end
l

g foo = -Year
bys Firm (foo) : replace Rendite = . if !Rendite & !(sum(Rendite >= 1))
so Firm Year
drop foo
l

Re: Datenbereinigung

BeitragVerfasst: Fr 26. Apr 2013, 14:45
von Flachzange
Also ich habs jetzt sogar nochmal mit einen kleineren Beispieldatensatz und selbst da werden alle 0 mit . ersetzt.

Re: Datenbereinigung

BeitragVerfasst: Fr 26. Apr 2013, 14:53
von daniel
Wenn Du meinen zuletzt geposteten code (basierend auf Deinem Beispiel) kopierst und laufen lässt, wirst Du eindeutig sehen, dass die Null im Jahr 2002 stehen bleibt, genau wie von Dir gewünscht.

Ich wäre dankbar, wenn die Behauptung, mein code würde nicht funktionieren und Stata würde alle Nullen erstezen von einem replizierbaren(!) Beipiel begleitet würde.

Re: Datenbereinigung

BeitragVerfasst: Fr 26. Apr 2013, 16:10
von Flachzange
Hat doch funktioniert, danke :D