Hallo zusammen
Ich habe ein Problem bei meinen Codes im Stata. Mein Datensatz sieht wie folgt aus (sample):
Date THENATIVE ABBLTDN ACCUHOLDING
04.01.1993 KEINWERT -0.0056 KEINWERT
05.01.1993 KEINWERT 0.0056 KEINWERT
06.01.1993 KEINWERT 0 KEINWERT
07.01.1993 KEINWERT -0.0167 KEINWERT
....
26.01.1993 KEINWERT 0 0.02
...
29.01.1993 KEINWERT 0 0
Man sieht, die Aktien sind entweder illiquide oder die 1. Firma war zu diesem Zeitpunkt noch nicht gelistet und hat somit keinen Wert. Ich möchte in meinem Datensatz schauen, ob der Januar stärker/schwächer ist als die anderen Monate. Ich haben einen Datensatz über 20 Jahre von über 300 Firmen. Wenn ich jetzt mein Sample von oben berechne sieht das so aus: Ich rechne zuerst für jeden Tag 1+ Rendite. Somit hätte ich beispielsweise für ABBLTDN am 04.01.1993 -0.0056 + 1 = 0.9944. Danach rechne ich für jede Firma die täglichen Rendite (1+R) auf einen Monat hoch. Für das verwende ich folgende Formel: 1+r_t1 * 1+r_t2.....1+r_tn
Im Januar ist der letzte Tag im Jahre 1993 der 29. Januar also wäre n 29. Dies rechne ich für jede Firma und danach nehme ich den Mittelwert aller Firmen für z.B. 1993m1.
Ich hoffe, ich konnte das einigermassen verständlich erklären. Nun das Problem: Wenn ich 1+ rechne, dann nimmt dort wo kein Wert ist, dies ebenfalls den Wert 1 an. Wenn ich danach den Mittelwert rechne, verfälscht mir dies, dass Resultat komplett. Als konkretes Beispiel für den Januar 1993 mit den 3 Firmen oben:
Ich erhalte 1 für THENATIVE als Rendite für 1993m1, 1.00001 für ABBLTDN für 1993m1 und 1.02 für ACCUHOLDING 1.02. Der Mittelwert daraus ergibt 1.00667.
Der korrekte Mittelwert wäre jedoch meiner Meinung nach 1.010, also die beiden Mittelwerte für ABBLTDN und ACCUHOLDING. THENATIVE war nicht gelistet, sollte also nicht in die Berechnungen einfliessen solange kein Wert dort ist.
Ich habe dies versucht zu eliminieren mit folgendem Code:
- Code: Alles auswählen
gen adjret1 = adjret if adjret != . & adjret != 0
Jedoch bleibt das Resultat dasselbe.
Kann mir jemand weiterhelfen? Ich kann natürlich meine anderen Codes auch noch zeigen. Ich glaube der richtige Ansatz wäre wenn ich nach dem ich alles gerechnet habe, die einzelnen Resultate -1 rechne und danach sage Stata soll alle 0er raushauen. Und danach den Mittelwert. Bin mir jedoch nicht sicher ob und wie das geht.
UPDATE: Ich glaube ich habe das Problem zum Teil gelöst. Ich muss einfach bevor ich den collapse (mean) command mache, die Renditen -1 rechnen und dann noch alle 0er droppen!
- Code: Alles auswählen
gen monatsrendite = monthlyreturn - 1
drop if monatsrendite == 0
collapse (mean) monatsrendite, by(month1)
Das einzige Problem ist, hier lösche ich wohl auch 0er von Aktien welche illiquide sind und nicht nur keine Werte haben. Ich sollte also beim drop if command noch eine folgende If-Funktion einfügen: Stata soll nur 0er droppen, bei welchen im Vormonat ebenfalls ein 0 ist!
Das heisst Februar 1993 von einer Firma darf nur gedroppt werden, wenn der Februar 1993 UND auch der Januar 1993 von dieser Firma 0 ist. Kennt da jemand den Command?