Seite 1 von 1

if-Bezug auf einzelnen Wert in Paneldaten

BeitragVerfasst: Mi 13. Mär 2013, 15:40
von FBN22
Hallo erstmal. Bin neu hier und bin dankbar, Antworten auf die eine oder andere Frage zu kriegen, da ich zum ersten mal vertieft mit stata arbeite und deshalb hin und wieder am rumkämpfen bin...

Eine wahrscheinlich äusserst banale Frage. Ich weiss leider nicht, nach welchen Stichworten ich suchen soll um eine Antwort zu finden..:
Wie muss ich im folgenden Fall bei der Variablengenerierung den if-Befehl formulieren: Variable a soll =1 sein für alle Zeitpunkte von 1960-1970, wenn Kriterium b zu Zeitpunkt 1960=2 ist.

Also in folgender Art:
gen a=1 if year>=1960 & if year <=1970 & if year1960=2

meine Frage bezieht sich auf die Formulierung des letzten Teils...

...ich hoffe das ist verständlich - danke für eure Reaktionen!

Re: if-Bezug auf einzelnen Wert in Paneldaten

BeitragVerfasst: Do 14. Mär 2013, 12:36
von daniel
Das ist schwer zu beantworten, kannst Du mal einen Beispieldatensatz erzeugen, an dem zu erkennen ist, was Du hast, und was Du genau willst. Möglicher Weise ist das einfacher in zwei Schritten zu machen.

Ansonsten ist der leichte Tel der Antwort, dass Deine Syntax illegal ist. Der -if- qualifier taucht genau einmalauf. Zudem ist das letzte "=" zeichen eine Zuweisung -- Du willst aber einen logischen Vergleich (i.e. "=="). Statt

Code: Alles auswählen
gen a=1 if year>=1960 & if year <=1970 & if year1960=2


tippe

Code: Alles auswählen
gen a=1 if year>=1960 & year <=1970 year1960 == 2

Re: if-Bezug auf einzelnen Wert in Paneldaten

BeitragVerfasst: Di 19. Mär 2013, 03:28
von FBN22
Hm, war etwas verworren, du hast recht, das befehlbeispiel war zwar nur sinnbildich gemeint. ich versuchs mal noch so zu erklären:
Ich habe Paneldaten (long), und möchte einen Dummy a generieren, welcher für ausgewählte Jahre=1 ist, wenn eine bestimmte Variable in einem einzelnen bestimmten Jahr ein Kriterium erfüllt.

also eben in der Art
gen a=1 if year>=1960 & year <=1970 plus die zusätzliche Bedingung, dass im year 1960 ein Kriterium (zB >=2) erfüllt ist.

in der Beilage ein Beispiel, mit dem erwähnten Dummy, bereits manuell eingefügt.
Variablen sind country, year, var3, dummy; wobei var3 im Jahr 1960 das Kriterium enthält.

Re: if-Bezug auf einzelnen Wert in Paneldaten

BeitragVerfasst: Di 19. Mär 2013, 13:36
von daniel
Falls jedes Land das Jahr 1960 beobachtet wurde, sollte sowas funktionieren

Code: Alles auswählen
g byte a = (year == 1960) & (var3 >= 2)
bys country (year) : replace a = a[_n - 1] if inrange(year, 1961, 1970)

Re: if-Bezug auf einzelnen Wert in Paneldaten

BeitragVerfasst: Mi 20. Mär 2013, 18:35
von FBN22
das scheint soweit zu klappen, ja. vielen dank, daniel!

Jedoch verstehe ich nicht ganz, was a[_n-1] macht/bewirkt. kannst du mir das vielleicht erklären?

Re: if-Bezug auf einzelnen Wert in Paneldaten

BeitragVerfasst: Mi 20. Mär 2013, 18:45
von daniel
Jedoch verstehe ich nicht ganz, was a[_n-1] macht/bewirkt. kannst du mir das vielleicht erklären?


Das schaust Du Dir am besten einfach an

Code: Alles auswählen
clear
se obs 10
g foo = _n
l
g bar = foo[_n - 1]
l