Seite 1 von 1

Fehler in Schleife

BeitragVerfasst: Mi 20. Feb 2013, 15:55
von Julia_Stata
Liebe Leute,

mein Datensatz hat als folgende Variablen:
hhidcode (1 bis 3000) welcher einzelne Haushalte beschreibt und idcodes (je 1 bis max 46), der jedem Haushaltsmitglied eine Nummer zuordnet (letztlich i=31000+). Als eine weitere Variable ist bei mir das Arbeitsangebot (in Stunden) jedes einzelnen Mitglieds aufgelistet. Nun möchte ich das Arbeitsangebot der einzelnen Haushalte berechnen, sprich für jeden Haushalt, das Arbeitsangebot der Mitglieder addieren. (Da ich im Panel arbeite soll dies alles nur für das Jahr 2008 gemacht werden.)
Mein Ansatz sieht bisher folgendermaßen aus, läuft aber leider nicht so, wie erwartet:


local i=1

gen help1=sum(allwagework) if hhidcode[`i']==hhidcode[`i'+1]& year==2008 //alles aufsummiert für 2008
egen help2=max(help1) if year==2008 //generiert help2 als Summe aller Arbeitsangebotszeiten
gen help3=help2 if help1==help2 // generiert help3 als Variable für Summe Arbeitsangebote nur für den letzten Haushalt (bzw. vorletzte Mitglieder, wenn deren Arbeitsangebot=0)
drop help1
drop help2

while `i'<=31193{

gen help1=sum(allwagework) if hhidcode[`i']==hhidcode[`i'+1]& year==2008
replace help1=. if help1==help3
egen help2=max(help1) if year==2008
replace help3=help2 if help1==help2
drop help1
drop help2
end if foreach i>0 help1=.

}


Gerade wie ich die Schleife richtig beenden kann bin ich mir nicht sicher..
Ich bin dankbar um jeden Tipp!

LG Julia

Re: Fehler in Schleife

BeitragVerfasst: Mi 20. Feb 2013, 17:27
von daniel
Ich habe nur ganz grob überflogen, aber

-while- Schleifen sind extrem langsam

explizite Subscripte ([`i']) können sind bei (unbalacierten) Panels problematisch sein. Vielleicht ist es besser time series opreratiroen (l. etc.) verwenden

Schleifen- sind für dieses Problem (höchst wahrscheinlich) gar nicht nötig

Mit

-by- Prefix

etwa
Code: Alles auswählen
bys hhidcode year : egen[...]


und eventuell

-reshape-

ist das vermutlich schneller zu lösen.

Re: Fehler in Schleife

BeitragVerfasst: Do 21. Feb 2013, 15:40
von Toblerone
Hallo Julia

Ich kann deinen Code nicht ganz nachvollziehen, aber ich glaube das ist auch gar nicht nötig. Wie daniel schon angetönt hat, sollte dies viel einfacher gehen:

Code: Alles auswählen
by hhidcode, sort: egen newvar=total(allwagework) if year==2008

sollte für jeden Haushalt die Summe von allwagework berechnen.

Re: Fehler in Schleife

BeitragVerfasst: So 24. Feb 2013, 14:56
von Julia_Stata
Super, danke- es funktioniert jetzt!!! :)