Datumsvariable erstellen und Mergen zweier Datensets

Allgemeine Fragen rund um Statistik mit Stata.

Datumsvariable erstellen und Mergen zweier Datensets

Beitragvon Len111 » Mo 25. Apr 2022, 13:29

Hallo zusammen!

Für mein Projekt muss ich zwei Datensätze mergen. Dies möchte ich über die Variablen Datum und Ort tun.

Datensatz 1 hat das Datum in folgender Form vorliegen:
date str10 %10s -> ausgeschrieben als z.B : 2015-01-01

Datensatz 2 gibt das Datum als verschiedene Variablen an:
year int %8.0g ->ausgeschrieben z.B 2015
month byte %8.0g -> 1
day byte %8.0g -> 1
endmonth byte %8.0g -> 2 (manche Events spielen sich an mehreren Tagen ab)
endday byte %8.0g -> 1

Nun stellen sich mir zwei Probleme:
1. Wie transformiere ich die verschiedenen Variablen aus Datensatz 2 zu einer einzelnen Datumsvariable welche mit Datensatz 2 gemerged werden kann?
2. Wie kann ich die Daten so mergen, dass Datensatz 1 zu sowohl dem Startdatum als auch zu dem Enddatum von Datensatz 2 angefügt wird?

Ich bin für jede Hilfe sehr dankbar!
Bis dahin,
Len
Len111
 
Beiträge: 6
Registriert: Mo 25. Apr 2022, 13:02
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Datumsvariable erstellen und Mergen zweier Datensets

Beitragvon Staxa » Mo 25. Apr 2022, 13:39

Angenommen die Datensvariablen sind numerisch wie gezeigt, dann kannst du das theoretisch so bauen:

Code: Alles auswählen
gen newdatum = string(year) + "-" + string(month) + "-" + string(day)


Und dann hast du eine Stringvariable im gleichen Format. Natürlich kannst du dann auch mehrere Mergevariablen setzen, also etwa, dass Date1 und Date2 passen müssen, etwa

Code: Alles auswählen
merge 1:1 tstart tend using...


Aber bin mir nicht ganz sicher, ob ich das so verstehe. Theoretisch kannst du natürlich auch mehrere merges nacheinander ausführen und dann jeweils die Zielvariable anpassen. Dann müssen die Vars im 2. Mal aber anders benannt werden, die neu angefügt werden sollen.
Stata für Anfänger: www.statabook.com
Staxa
 
Beiträge: 679
Registriert: Di 27. Feb 2018, 12:56
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Datumsvariable erstellen und Mergen zweier Datensets

Beitragvon Len111 » Di 26. Apr 2022, 17:35

Hallo!

Danke für die Antwort! Ich konnte damit die Datumsvariable erstellen.

Anschließend habe ich versucht die zwei Datensätze wie folgt zu mergen:

merge m:m city date using...

Result # of obs.
-----------------------------------------
not matched 73,480
from master 55,385 (_merge==1)
from using 18,095 (_merge==2)

matched 15,379 (_merge==3)
-----------------------------------------

Daraufhin habe ich für beide Variablen getestet:

merge m:m city using
Result # of obs.
-----------------------------------------
not matched 0
matched 74,950 (_merge==3)
-----------------------------------------

merge m:m date using
Result # of obs.
-----------------------------------------
not matched 73,279
from master 55,385 (_merge==1)
from using 17,894 (_merge==2)

matched 15,379 (_merge==3)
-----------------------------------------

Meine erste Erklärung dafür wäre, dass die neue Datumsvariable (gen newdatum = string(year) + "-" + string(month) + "-" + string(day)) folgendes Datum erstellt: 2015-1-1 , und nicht wie im Datensatz 2: 2015-01-01.
Macht das Sinn? Und wenn ja, wie kann ich "gen newdatum = string(year) + "-" + string(month) + "-" + string(day)" so verändern, dass ich Monat und Tag mit zwei Ziffern angegeben bekomme?
Gibt es evtl. eine andere Lösung/Erklärung?

Vielen Dank für jede Hilfe!
Len111
 
Beiträge: 6
Registriert: Mo 25. Apr 2022, 13:02
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Datumsvariable erstellen und Mergen zweier Datensets

Beitragvon Staxa » Mi 27. Apr 2022, 11:39

Ein m:m Merge ist grundsätzlich irgendwie falsch. Da solltest du dir etwas anderes überlegen


m:m specifies a many-to-many merge and is a bad idea. In an m:m merge, observations are matched
within equal values of the key variable(s), with the first observation being matched to the first; the
second, to the second; and so on. If the master and using have an unequal number of observations
within the group, then the last observation of the shorter group is used repeatedly to match with
subsequent observations of the longer group. Thus m:m merges are dependent on the current sort
order—something which should never happen.

https://www.stata.com/manuals13/dmerge.pdf
Stata für Anfänger: www.statabook.com
Staxa
 
Beiträge: 679
Registriert: Di 27. Feb 2018, 12:56
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Datumsvariable erstellen und Mergen zweier Datensets

Beitragvon Len111 » Mo 9. Mai 2022, 19:25

Danke für die Antwort!

Ich habe einiges versucht aber ich meine es könnte tatsächlich an der Formatierung des Datums liegen.

Staxa hat geschrieben:Meine erste Erklärung dafür wäre, dass die neue Datumsvariable (gen newdatum = string(year) + "-" + string(month) + "-" + string(day)) folgendes Datum erstellt: 2015-1-1 , und nicht wie im Datensatz 2: 2015-01-01.
Macht das Sinn? Und wenn ja, wie kann ich "gen newdatum = string(year) + "-" + string(month) + "-" + string(day)" so verändern, dass ich Monat und Tag mit zwei Ziffern angegeben bekomme?


Kann mir hierzu jemand helfen?

Danke schonmal!
Len111
 
Beiträge: 6
Registriert: Mo 25. Apr 2022, 13:02
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Datumsvariable erstellen und Mergen zweier Datensets

Beitragvon Staxa » Di 10. Mai 2022, 10:03

Dann wäre eine Alternative, dass du aus den einzelnen Variablen jeweils eine Stata Datumsvariable generierst und dann darauf das matching machst. ein Beispiel findet sich hier:

https://www.stata.com/support/faqs/data ... variables/
Stata für Anfänger: www.statabook.com
Staxa
 
Beiträge: 679
Registriert: Di 27. Feb 2018, 12:56
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Datumsvariable erstellen und Mergen zweier Datensets

Beitragvon Len111 » Fr 20. Mai 2022, 12:44

Vielen Dank für die Hilfe!
Ich konnte daraufhin erfolgreich meine beiden Datensets mergen.

Nun stellt sich mir das Problem, dass ich einen der ursprünglichen Datensätze noch verändern muss.
Genau gesagt muss ich aus mehreren Variablen einen Average bilden.

Beispiel: Variablen: Datum , var1 , var2 , var 3
Observations: Datum 1, Wertx, Wertx, Wertx
Datum 2, Wertx, Wertx, Wertx
.....usw
Ich möchte nun den Average aus den Werten von Datum 1 und Datum 2 bilden und als Datum 3 neu generieren.
Ist das möglich und wenn ja wie?

Vielen Dank schonmal für die Hilfe!
Len111
 
Beiträge: 6
Registriert: Mo 25. Apr 2022, 13:02
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Datumsvariable erstellen und Mergen zweier Datensets

Beitragvon Staxa » Sa 21. Mai 2022, 09:26

Ganz einfach etwa:

Code: Alles auswählen
gen var3 = (var1 + var2) / 2
Stata für Anfänger: www.statabook.com
Staxa
 
Beiträge: 679
Registriert: Di 27. Feb 2018, 12:56
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Datumsvariable erstellen und Mergen zweier Datensets

Beitragvon Len111 » Mi 29. Jun 2022, 08:24

Hallo,

im weiteren Verlauf meiner Analyse moechte ich eine weitere Datumsvariable generieren, welche den Vortag zeigt (t-1).

Meine Idee hierzu:
gen predate = mdy(month, day-1, year)
format predate %td

Das funktioniert jedoch nicht fuer Daten, bei welchen das Datum den Monatsersten beinhaltet (zb. 01.06.2020).
In diesem Fall gibt mir Stata nur "." als Ergebnis.

Ich wollte das Problem zunaechst so loesen:
replace predate=21092 if predate==. (21092 ist das Datumsformat fuer ein spezielles Datum bevor es mit "format predate %td" umgeformt wird)

Allerdings habe ich insgesamt vier Ereignisse, welche ich so umformen muesst, und ich kann diesen Loesungsweg nur pauschal fuer alle gleichzeitig anwenden, was mich am Ende mit drei falschen Datumsvariablen enden lassen wuerde.

Eine ganz neue Variable zu generieren macht fuer mich auch keinen Sinn, da ich ueber die t-1 Variable "predate" das Datenset spaeter mergen will.

Kann mir jemand hierzu helfen?

Vielen Dank!
Len111
 
Beiträge: 6
Registriert: Mo 25. Apr 2022, 13:02
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Datumsvariable erstellen und Mergen zweier Datensets

Beitragvon Staxa » Mi 29. Jun 2022, 08:27

Solange du deine Datumsvariable bereits im Stata Datumsformat generiert hast kannst du einfach eine neuen Variable generieren, also etwa
gen date_pre = date - 1

Insgesamt erscheint mir das aber fragwürdig. Möchte man für Zeitreihenanalysen lags und leads benutzen gibt es eine extra Funktion, siehe

https://www.stata.com/support/faqs/data ... variables/
https://www.princeton.edu/~otorres/TS101.pdf
Stata für Anfänger: www.statabook.com
Staxa
 
Beiträge: 679
Registriert: Di 27. Feb 2018, 12:56
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Nächste

Zurück zu Statistik allgemein

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron