2016-04-05 8 views
0

Ich habe ein unausgeglichenes Panel mit 3 Kennungen (Datum, Firma und Person) für die ich Rolling Mittel für meine Variable (price) über die letzten 90 Tage für jedes Unternehmen und berechnen möchte Datum. Als ich das Panel mit tsset belegte bekomme ich eine Fehlermeldung repeated time values within panel. Da jede Person in meinem Panel zu mehreren Unternehmen gehört, habe ich mehrere Unternehmen-Personen-Paare für jedes Datum. Hier ist mein Code so weit:Rolling Mean für Panel mit 3 Bezeichnern in Stata

tsset company_id date_id 
tsegen Mean_90days = rowmean(L(0/90).price)  

Gibt es eine Möglichkeit, wie eine solche Berechnung zu machen?

Meine Lösung war eine company_person_id mit group(company_id person_id) zu erzeugen, für jede company_person_id date Beobachtung zu berechnen bedeuten und egen=mean() bedeuten zu verwenden by (company_id date_id) zu aggregieren. Ich bin mir jedoch immer noch nicht sicher, ob es plausibel ist.

+0

Ihre zweistufige Lösung scheint vernünftig zu sein, weil es so funktioniert, aber es gibt einen direkteren Weg: siehe meine Antwort. –

+0

Eigentlich wäre die Problemumgehung problematisch, wenn man nicht die Tatsache berücksichtigt, dass unterschiedliche Mittelwerte über (Unternehmens-, Personen-) Paare auf einer unterschiedlichen Anzahl von Messungen basieren könnten. Die richtige Umgehung wäre ein gewichtetes Mittel. –

+0

Ja, du hast Recht @Nick Cox - ein gewichtetes Mittel ist in meinem Fall besser. – In777

Antwort

5

Sie können nicht beide Wege mit dieser Maschinerie haben. Wenn Sie angeben, dass es sich bei den Unternehmen um Panels handelt, werden diese aufgrund von Replikaten für dasselbe Panel und dieselbe Zeit nicht gelöscht. tsset wird fehlschlagen und tsegen (SSC, wie Sie erklären sollten) wird sich nicht rühren. Wenn das tsset Framework ablehnt, dann wird alles, was darauf basiert, nicht helfen.

Wenn Sie angeben, dass (Unternehmen, Person) Paare Panels sind, kann Ihre Berechnung fortgesetzt werden, aber Sie werden keine Werte für verschiedene Personen in derselben Firma zusammenfassen. was scheint, was du willst.

Aber es gibt gute Nachrichten.

rangestat (SSC) (angekündigt here) sollte helfen. und die Gegenwart, wie in Ihrem Anruf

Ihr Befehl würde ich denken, ähnelt

rangestat (mean) price, interval(date_id -90 0) by(company) 

Beachten Sie, dass dies für die letzten 90 Tage wird die Berechnung.

+0

Vielen Dank, ich denke "rangestat" ist, was ich hier brauche. – In777