Neu in

Neue Datums- und Zeitfunktionen

Daten und Zeiten (oder Datumszeiten) sind allzu vertraute Konzepte, die wir oft als selbstverständlich ansehen. Sie lauern unter der Datenverwaltung und der statistischen Analyse (und dem zugrundeliegenden Computersystem) mit verschiedenen Graden der Wichtigkeit, je nach der anstehenden Aufgabe. Manchmal können sie knifflig werden, und man muss sich mit den Tücken von Kalendern und Uhren auseinandersetzen.

Höhepunkte

  • Funktionen, die Dauern berechnen, wie z. B. Alter und andere Unterschiede zwischen Datumswerten
  • Funktionen, die relative Daten oder Daten aus anderen Daten berechnen, z. B. den vorherigen oder nächsten Geburtstag oder Jahrestag relativ zu einem bestimmten Datum
  • Funktionen, die die verschiedenen Komponenten aus Datumswerten und Variablen extrahieren

Wann feiern zum Beispiel Schaltlinge (Personen, die am 29. Februar geboren sind) in Nicht-Schaltjahren ihren Geburtstag? Und wann ist ein Jahr ein Schaltjahr? Es ist ja nicht nur alle vier Jahre. Wie groß ist beispielsweise der Unterschied in Millisekunden zwischen zwei Zeitstempeln, wenn Schaltsekunden gezählt werden, basierend auf den Standards der koordinierten Weltzeit (UTC)?
Wir haben eine Reihe von datetime-Funktionen hinzugefügt, sowohl in Stata als auch in Mata, um genau und bequem mit datetimes umzugehen für (1) die Berechnung von Zeitdauern, wie z.B. Alter und andere datetime-Differenzen; (2) das Finden von relativen Daten, wie z.B. der nächste Geburtstag nach einem bestimmten Datum; und (3) das Extrahieren von Komponenten von Stata datetime-Werten und Variablen.

Zeigen Sie, wie es funktioniert

Datum Dauer

Wenn Sie am 29. Februar geboren sind, werden Sie in Großbritannien am 1. März, in Taiwan aber am 28. Februar alt – natürlich in Nicht-Schaltjahren. Die Verlängerung des Führerscheins oder die Strafe für das vorzeitige Erreichen der Bar werden entsprechend festgelegt. Die neue Funktion age() sagt Ihnen das Alter, in ganzen Zahlen, mit einem optionalen Argument für die Behandlung von Schaltjahren. Wenn Sie z. B. am Schalttag des Jahres 2000 geboren sind, erfahren Sie im Folgenden, dass Sie Ende Februar 2018 noch 17 Jahre alt sind, weil in Nicht-Schaltjahren der 1. März Ihr Geburtstag ist.

. display age(td(29feb2000), td(28feb2018), "01mar")

NHinweis: td() ist eine Funktion, die Stata auf bequeme Weise dazu bringt, wörtliche Datumsangaben zu verstehen.
Wir bieten nicht die Option an, dass Sprösslinge ihre Geburtstage nur alle vier Jahre feiern, wenn man die schrecklichen Verzweigungen bedenkt, wie das grausame Schicksal des Sprösslings Frederic in der komischen Oper Pirates of Penzance, der 63 Jahre warten musste, um sich an seinem „einundzwanzigsten Geburtstag“ mit seiner Liebe zu vereinen (Sullivan 1923).
Die Funktion datediff() berechnet Differenzen zwischen Daten im Allgemeinen, abgerundet auf die nächste ganze Zahl, in verschiedenen Zeiteinheiten: Jahr, Monat oder Tag. age() ist ein Spezialfall von datediff() in Jahren. Wenn Sie z. B. am 31. Juli 2000 den Bund fürs Leben geschlossen haben, können Sie an Ihrem 10. Hochzeitstag den Tag mit dem Wissen retten, dass Sie seit 3.652 Tagen verheiratet sind.

. display datediff(td(31jul2000), td(31jul2010), "day")

Versicherungsgesellschaften möchten vielleicht die Details des Alters einer Person wissen, wobei jede Nachkommastelle des Alters in Dollar umgerechnet wird. Die Funktionen age_frac() und datediff_frac() ermitteln mit präzisen Brüchen das Alter und allgemein die Differenz von Daten in Einheiten von Jahr, Monat oder Tag.

. display datediff_frac(td(17nov2019), today(), "month")

gibt die genaue Anzahl der Monate vom Tag des ersten dokumentierten Falls von COVID-19 bis heute an. Die genaue Berechnung von Datumsdifferenzen kann in Überlebensmodellen wichtig sein. datediff_frac() und age() berechnen Differenzen auf kompatible Weise. Wenn Sie also Datumsdifferenzen aus datediff_frac() in einem Überlebensmodell verwenden und Altersangaben aus age() als Prädiktoren im Modell verwenden, werden sie konsistent sein.

Zeitdauer

Wir vertrauen im Allgemeinen darauf, dass unsere Uhren perfekt mit der Bewegung der Erde synchronisiert sind, aber es läuft nicht immer wie ein Uhrwerk. Seit 1972 wird etwa jedes Jahr eine Schaltsekunde hinzugefügt, um unsere Uhren mit der Verlangsamung der Erdrotation in Einklang zu bringen. Es gibt eine Debatte über die Nützlichkeit von Schaltsekunden, so dass wir in Stata beides verbuchen, d. h. Zeit mit und ohne Schaltsekunden. In Funktionsnamen verwenden wir C für Ersteres und c für Letzteres.
Die Funktion isleapsecond() sagt Ihnen, wie Sie vielleicht schon vermutet haben, ob die betreffende Zeit eine Schaltsekunde ist oder nicht. Dies kann praktisch sein, um Ihnen mitzuteilen, ob es diese seltenen Schaltsekunden in Ihren Daten gibt und welche Funktionen sicher verwendet werden können.
Die Funktionen Clockdiff() und clockdiff() ermitteln die Differenz zwischen zwei Zeiten, abgerundet auf die nächste Ganzzahl, in einer beliebigen Einheit Ihrer Wahl, mit bzw. ohne Schaltsekunden. Clockdiff_frac() und clockdiff_frac() finden diese Differenz noch genauer. Wenn Sie Zeitstempel (mit Schaltsekunden) aufgezeichnet haben, wenn Himmelsobjekte einen kompletten Orbit beginnen und beenden (als Stata-Variablen beginnen und enden), werden daraus die Orbitalperioden in Tagen erzeugt.

. generate double period = Clockdiff_frac(begin, end, "day")

Relative Daten

Wir alle verstehen Zeichenketten wie „4. Juli 1776“. Aber Stata braucht eine flexiblere Darstellung, die es z. B. erlaubt, Differenzen zu berechnen. Stata speichert Daten als Zahlen – die Anzahl der Tage relativ zu einem von uns gewählten Referenzpunkt: 1. Januar 1960. Für Zeiten ist es die Anzahl der Millisekunden ab dem Schlag Mitternacht am 1.
Wir erwarten nicht, dass Benutzer diese unverständlichen Zahlen addieren oder subtrahieren, aber wir machen es möglich, Stata-Daten relativ zu anderen Daten zu berechnen. Wir behandeln jetzt Geburtstage relativ zu einem bestimmten Datum und Daten relativ zum Monat eines bestimmten Datums.
Die Funktion birthday() gibt den Geburtstag als Stata-Datum in einem bestimmten Jahr an. previousbirthday() und nextbirthday() liefern Stata-Daten für den vorherigen bzw. nächsten Geburtstag relativ zu einem bestimmten Datum.
Die Funktionen daysinmonth(), firstdayofmonth() und lastdayofmonth() finden zunächst den Monat eines gegebenen Stata-Datums und geben jeweils die Anzahl der Tage in diesem Monat, das Stata-Datum für den ersten Tag in diesem Monat und das Stata-Datum für den letzten Tag in diesem Monat zurück.
Der lästige Schalttag taucht etwa alle vier Jahre seit 1582 auf, als Papst Gregor XIII. den heute weit verbreiteten Gregorianischen Kalender einführte, indem er den Julianischen Kalender anpasste (Papst Gregor XIII., 1582). Die Änderung befasste sich mit der falschen Annahme, dass das durchschnittliche Jahr genau 365,25 Tage dauert, und stellte sicher, dass Ostern näher an dem Zeitpunkt liegt, an dem es stattfinden sollte, nämlich an der März-Tagundnachtgleiche. Der Gregorianische Kalender reformierte den Julianischen Kalender, indem er die Schaltjahre in Jahrhundertjahren, die nicht genau durch 400 teilbar waren, fallen ließ.
Die Funktionen isleapyear(), previousleapyear() und nextleapyear() nehmen ein Jahr als Eingabe und sind schmerzhaft offensichtlich, was sie tun.

Referenzen

Pope Gregory XIII. 1582. Inter gravissimas.
Sullivan, A. 1923. The Pirates of Penzance or the Slave of the Duty, libretto by W.S. Gilbert, G. Schimer.