Flexible Schleife

Fragen zu Stata Syntax und Do-Files.

Flexible Schleife

Beitragvon pippo_inzaghi » Di 28. Mai 2013, 22:10

Hallo, ich habe folgendes Problem: Ich würde gerne Daten aggregieren. Die entscheidende Variable hierbei ist "ehrgeizig". Diese kommt je "id" unterschiedlich häufig vor. Nur wenn "ehrgeizig" für alle Beobachtungen eines Monats einheitlich "1" sind, dann soll "x"[1] - also die erste Beobachtung der neu zu generierenden Variablen "x" auch gleich "1" sein. Das Problem ist, dass die Anzahl der Beobachtungen für "ehrgeizig" immer unterschiedlich ist und keinem Muster folgt. Maximal treten jedoch 17 Beobachtungen in einem Monat für ehrgeizig auf. Eine derart flexible Schleife zu programmieren ist mir leider bisher nicht gelungen. Ein Ausschnitt des Datensatzes sieht so aus:

id Monat Jahr ehrgeizig x
900618 1 2000 1 0
900618 1 2000 0 0
900618 1 2000 1 0
900618 2 2000 1 1
900618 2 2000 1 1
900666 12 2000 1 1
900666 1 2001 0 1
900666 1 2001 0 1
900666 1 2001 0 1
900666 1 2001 0 1
900666 1 2001 0 1
900713 12 2000 0 1
900713 3 2000 0 0
900713 3 2001 1 0
900713 4 2002 0 0
900713 4 2002 0 0
900713 4 2003 0 0
900713 4 2003 1 0

Die zu generierende Variable "x" habe ich jetzt mal manuell erstellt, damit man es vielleicht leichter versteht.

ich denke, dass der Befehl

bysort id Jahr Monat: gen x=1 irgendwie in eine flexible Schleife gepackt werden muss, aber irgendwie schaff ich´s nicht...

Vielen Dank für eure Hilfe
pippo_inzaghi
 
Beiträge: 4
Registriert: Mo 27. Mai 2013, 22:21
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Flexible Schleife

Beitragvon daniel » Di 28. Mai 2013, 22:43

Ich bin noch nicht sicher, ob hier eine Schleife nötig ist, noch kann ich nachvollziehen, was genau das Ziel dieser Übung sein soll.

Wichtiger aber ist, dass ich Probleme habe Deine verbale Erläuterung mit dem Beispiel in Einklang zu bringen.

Du schreibst

Nur wenn "ehrgeizig" für alle Beobachtungen eines Monats einheitlich "1" sind, dann soll "x"[1] - also die erste Beobachtung der neu zu generierenden Variablen "x" auch gleich "1" sein.


Wie passt das mit dem Eintrag

900713 12 2000 0 1


Deines Beispiels zusammen? Hier gibt es nur einen Monat (Dezember 2000) und ehrgeizig nimmt den Wert 0 an. Wieso nimmt dann x den Wert 1 an? Und, was meinst Du genau mit "der ersten Beobachtung" in x? Die erste für jede id, jedes Jahr, jeden Monat?
Stata is an invented word, not an acronym, and should not appear with all letters capitalized: please write “Stata”, not “STATA”.
daniel
 
Beiträge: 1060
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Flexible Schleife

Beitragvon pippo_inzaghi » Di 28. Mai 2013, 23:04

Hallo Daniel,

da hast du Recht- das ganze passt nicht zusammen- im Bsp. müsste die letzte Ziffer eine "0" sein. Für die Monate die nur eine Beobachtung besitzen ist sicher keine Schleife notwendig- dafür habe ich eine Lösung über _n und _N gefunden.

Mit der ersten Beobachtung meine ich dementsprechend die Erste Beobachtung des jeweiligen Monats, nachdem nach id Jahr Monat über bysort sortiert wurde. x stellt dabei lediglich eine neue Variable dar und wäre mit "ehrgeizig" gleich zu setzen. Ziel der Übung: Nur wenn jemand bei allen Beobachtungen im Monat ehrgeizig (also ehrgeizig=1) ist, dann ist die erste Beobachtung der neu generierten Variable x auch 1.

Vielen Dank für deine Hilfe :)
pippo_inzaghi
 
Beiträge: 4
Registriert: Mo 27. Mai 2013, 22:21
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Flexible Schleife

Beitragvon daniel » Mi 29. Mai 2013, 12:34

Ok, das Beispiel passt m.E. auch an anderen Stellen nicht (Jan 2001 bei id 900666).

Hier ist mal ein Versuch. Variable foo ist das, was Du als x bezeichnest

Code: Alles auswählen
// set up your example
clear
se more off
inp id Monat Jahr ehrgeizig x
900618 1 2000 1 0
900618 1 2000 0 0
900618 1 2000 1 0
900618 2 2000 1 1
900618 2 2000 1 1
900666 12 2000 1 1
900666 1 2001 0 1
900666 1 2001 0 1
900666 1 2001 0 1
900666 1 2001 0 1
900666 1 2001 0 1
900713 12 2000 0 1
900713 3 2000 0 0
900713 3 2001 1 0
900713 4 2002 0 0
900713 4 2002 0 0
900713 4 2003 0 0
900713 4 2003 1 0
end

// create variable
bys id Jahr Monat : g foo = sum(ehrgeizig)
bys id Jahr Monat : replace foo = (foo[_N]/_N == 1)

l ,sepby(id Jahr Monat)
Stata is an invented word, not an acronym, and should not appear with all letters capitalized: please write “Stata”, not “STATA”.
daniel
 
Beiträge: 1060
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Flexible Schleife

Beitragvon pippo_inzaghi » Mi 29. Mai 2013, 18:54

Vielen Dank Daniel- scheint perfekt zu klappen!!! :D
pippo_inzaghi
 
Beiträge: 4
Registriert: Mo 27. Mai 2013, 22:21
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post


Zurück zu Stata Syntax

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast