Nou în

Funcții noi de dată și oră

Datele și orele (sau dată-timp) sunt concepte prea familiare pe care le considerăm adesea de la sine înțeles. Acestea se ascund sub gestionarea datelor și a analizei statistice (și a sistemului informatic subiacent) cu diferite grade de importanță în funcție de sarcina la îndemână. Uneori, acestea pot deveni complicate, iar ciudățeniile din calendare și ceasuri trebuie rezolvate.

Repere

  • Funcții care calculează duratele, cum ar fi vârstele și alte diferențe între orele de date
  • Funcții care calculează date relative sau date de la alte date, cum ar fi ziua de naștere sau aniversarea anterioară sau următoare în raport cu o dată dată
  • Funcții care extrag diferitele componente din valori și variabile dată-timp

De exemplu, când leaplings (persoanele născute pe 29 februarie) își sărbătoresc zilele de naștere în anii non-leap? Și când este un an bisect? Nu este doar la fiecare patru ani. Care este diferența, să zicem, în milisecunde, între două mărci de timp dacă se contorizează secundele de salt, pe baza standardelor de timp universal coordonat (UTC)?
Am adăugat un set de funcții datetime, atât în Stata, cât și în Mata, pentru a gestiona cu precizie și comoditate datele pentru (1) calcularea duratelor, cum ar fi vârsta și alte diferențe de datetime; (2) găsirea unor date relative, cum ar fi următoarea zi de naștere după o dată dată; și (3) extragerea componentelor valorilor și variabilelor Stata dată-timp.

Să vedem cum funcționează

Durata datei

Dacă v-ați născut pe 29 februarie, îmbătrâniți pe 1 martie în Marea Britanie, dar pe 28 februarie în Taiwan – în anii non-cruci, desigur. Reînnoirea permiselor de conducere sau penalizarea pentru lovirea prematură a barei vor fi stabilite în consecință. Noua funcție age() vă spune vârsta, în numere întregi, cu un argument opțional pentru gestionarea plopilor. De exemplu, dacă v-ați născut în ziua bisectivă a anului 2000, următoarele vă spun că aveți încă 17 ani la sfârșitul lunii februarie 2018, deoarece 1 martie este ziua dvs. de naștere în anii non-cruci.

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

Nu oferim opțiunea ca săriturile să își sărbătorească zilele de naștere doar la fiecare patru ani, având în vedere ramificațiile cumplite, precum soarta crudă a lui Frederic în opera comică Pirates of Penzance, care a trebuit să aștepte 63 de ani pentru a se uni cu dragostea sa pe „Douăzeci și unu de ani” (Sullivan 1923).
Funcția datiff() calculează diferențele dintre date în general, rotunjite la cel mai apropiat număr întreg, în diferite unități de timp: an, lună sau zi. age() este un caz special de datiff() în ani. De exemplu, dacă ați legat nodul la 31 iulie 2000, puteți salva ziua cu știința că ați fost căsătorit de 3.652 zile la cea de-a 10-a aniversare a nunții.

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

Companiile de asigurări ar putea dori să știe detaliile vârstei unei persoane, fiecare zecimală în vârstă traducându-se în dolari. Funcțiile age_frac() și datiff_frac() găsesc, cu fracții precise, vârsta și, în general, diferența de date în unități de an, lună sau zi.

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

spune numărul exact de luni de la data primului caz documentat de COVID-19 până astăzi. Calculul exact al diferențelor de dată poate fi important în modelele de supraviețuire. datediff_frac() și age() calculează diferențele într-un mod compatibil. Deci, dacă utilizați date de la dateiff_frac() într-un model de supraviețuire și utilizați vârste de la vârstă() ca predictori în model, acestea vor fi consecvente.

Durata de timp

În general, avem încredere că ceasurile noastre se sincronizează perfect cu mișcarea pământului, dar nu funcționează întotdeauna ca un ceas. În fiecare an, cam din 1972, se adaugă un al doilea salt pentru a alinia ceasurile noastre cu încetinirea rotației pământului. Există dezbateri cu privire la utilitatea secundelor de salt, așa că la Stata păstrăm ambele, adică timpul cu și fără secundele de salt. În numele funcțiilor, folosim C pentru prima și c pentru cea de-a doua.
Funcția isleapsecond() vă spune, după cum ați fi putut ghici, dacă timpul în cauză este sau nu o secundă. Acest lucru poate fi la îndemână pentru a vă informa dacă există acele secunde de salt rare în datele dvs. și ce funcții pot fi utilizate în siguranță.
Funcțiile Clockdiff() și clockdiff() găsesc diferența dintre două ori, rotunjite în jos la cel mai apropiat număr întreg, în orice unitate la alegere, cu și fără secunde de salt. Clockdiff_frac() și clockdiff_frac() găsesc această diferență mai precis. Dacă ați înregistrat marcaje de timp (cu secunde bisective) când obiectele cerești încep și termină o orbită completă (pe măsură ce variabilele Stata încep și se termină), aceasta va genera perioadele orbitale în zile.

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

Date relative

Cu toții înțelegem șiruri precum „4 iulie 1776”. Dar Stata are nevoie de o reprezentare mai flexibilă care să permită, de exemplu, să calculeze diferențele. Stata păstrează de fapt datele ca numere – numărul de zile în raport cu un punct de referință pe care l-am ales: 1 ianuarie 1960. De multe ori, este numărul de milisecunde de la lovitura de la miezul nopții de la 1 ianuarie 1960.
Nu ne așteptăm ca utilizatorii să adauge sau să scadă aceste numere de neînțeles, dar facem posibilă calcularea datelor Stata, în raport cu alte date. Acum ne ocupăm de zilele de naștere în raport cu o dată dată și de datele relativ la luna unei date date.
Funcția birthday() vă spune ziua de naștere, ca dată Stata, într-un an dat. previousbirthday() și nextbirthday() returnează datele Stata pentru ziua anterioară și respectiv următoarea zi de naștere, în raport cu o dată dată.
Funcțiile daysinmonth(),firstdayofmonth() și lastdayofmonth() găsesc mai întâi luna unei date Stata date și, respectiv, returnarea, numărul de zile din luna respectivă, data Stata pentru prima zi din luna respectivă și data Stata pentru ultima zi din luna respectivă.
Ziua sălbatică plictisitoare apare aproximativ la fiecare patru ani începând cu 1582, când Papa Grigore al XIII-lea a stabilit calendarul gregorian larg utilizat, prin ajustarea calendarului iulian (Papa Grigore al XIII-lea, 1582). Modificarea a abordat ipoteza incorectă că anul mediu durează exact 365,25 de zile și s-a asigurat că Paștele se întâmplă mai aproape de momentul în care ar trebui, adică în echinocțiul din martie. Calendarul gregorian a reformat calendarul iulian prin renunțarea la anii bisecți în anii de secol, care nu erau exact divizibili cu 400.
Funcțiile isleapyear(),previousleapyear() și nextleapyear() iau un an ca intrare și sunt dureros de evidente cu privire la ceea ce fac.

Referințe

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.