Nouveau dans 
Nouvelles fonctions de date et d’heure
Les dates et les heures (ou datetimes) sont des concepts bien trop familiers que nous considérons souvent comme acquis. Ils se cachent sous la gestion des données et l’analyse statistique (et le système informatique sous-jacent) avec différents degrés d’importance en fonction de la tâche à accomplir. Parfois, ils peuvent devenir délicats, et il faut alors composer avec les bizarreries des calendriers et des horloges.
Points forts
- Fonctions qui calculent des durées, telles que des âges et d’autres différences entre des dates.
- Fonctions permettant de calculer des dates relatives, ou des dates à partir d’autres dates, telles que l’anniversaire précédent ou suivant par rapport à une date donnée.
- Fonctions permettant d’extraire les différentes composantes des valeurs et des variables des dates.
Par exemple, quand les bissextiles (personnes nées le 29 février) fêtent-ils leur anniversaire dans les années non bissextiles? Et quand une année est-elle une année bissextile? Ce n’est pas seulement tous les quatre ans. Quelle est la différence, disons en millisecondes, entre deux horodatages si l’on compte les secondes intercalaires, sur la base des normes du temps universel coordonné (UTC)?
Nous avons ajouté un ensemble de fonctions de date-temps, à la fois dans Stata et dans Mata, afin de manipuler de manière précise et pratique les dates-temps pour (1) calculer des durées, telles que l’âge et d’autres différences de date-temps; (2) trouver des dates relatives, telles que le prochain anniversaire après une date donnée; et (3) extraire des composants de valeurs et de variables de date-temps de Stata.
Voyons comment cela fonctionne
Date durée
Si vous êtes né le 29 février, vous vieillissez le 1er mars au Royaume-Uni mais le 28 février à Taïwan – dans les années non bissextiles, bien sûr. Le renouvellement des permis de conduire ou la sanction pour avoir frappé prématurément à la barre seront déterminés en conséquence. La nouvelle fonction age() vous indique l’âge, en nombres entiers, avec un argument facultatif pour gérer les années bissextiles. Par exemple, si vous êtes né le jour bissextile de l’an 2000, la fonction suivante vous indique que vous avez toujours 17 ans à la fin du mois de février 2018, car le 1er mars est votre date d’anniversaire dans les années non bissextiles.
. display age(td(29feb2000), td(28feb2018), "01mar")
Remarque: td() est une fonction qui permet à Stata de comprendre les dates littérales.
Nous n’offrons pas la possibilité aux bissextiles de ne célébrer leur anniversaire que tous les quatre ans, compte tenu des terribles ramifications, comme le cruel destin du bissextile Frederic dans l’opéra comique Pirates of Penzance, qui a dû attendre 63 ans pour s’unir à son amour le jour de son « vingt et unième anniversaire » (Sullivan 1923).
La fonction datediff() calcule les différences entre les dates en général, arrondies au nombre entier le plus proche, dans diverses unités de temps : année, mois ou jour. age() est un cas particulier de datediff() en années. Par exemple, si vous vous êtes mariés le 31 juillet 2000, vous pouvez sauver la mise en sachant que vous êtes mariés depuis 3 652 jours le jour de votre 10e anniversaire de mariage.
. display datediff(td(31jul2000), td(31jul2010), "day")
Les compagnies d’assurance peuvent vouloir connaître les détails de l’âge d’une personne, chaque décimale de l’âge se traduisant en dollars. Les fonctions age_frac() et datediff_frac() trouvent, avec des fractions précises, l’âge, et en général, la différence de dates en unités d’année, de mois ou de jour.
. display datediff_frac(td(17nov2019), today(), "month")
indique le nombre précis de mois entre le jour du premier cas documenté de COVID-19 et aujourd’hui. Le calcul précis des différences de date peut être important dans les modèles de survie. datediff_frac() et age() calculent les différences de manière compatible. Ainsi, si vous utilisez les dates de datediff_frac() dans un modèle de survie et que vous utilisez les âges de age() comme prédicteurs dans le modèle, ils seront compatibles.
Durée du temps
Nous pensons généralement que nos horloges se synchronisent parfaitement avec le mouvement de la terre, mais cela ne fonctionne pas toujours comme une horloge. Chaque année environ depuis 1972, une seconde intercalaire est ajoutée pour aligner nos horloges sur le ralentissement de la rotation de la terre. L’utilité des secondes intercalaires fait l’objet d’un débat, c’est pourquoi Stata comptabilise les deux, c’est-à-dire le temps avec et sans secondes intercalaires. Dans les noms de fonctions, nous utilisons C pour le premier et c pour le second.
La fonction isleapsecond() vous indique, comme vous l’avez peut-être deviné, si l’heure en question est une seconde intercalaire ou non. Cela peut être pratique pour savoir s’il y a ces rares secondes intercalaires dans vos données et quelles fonctions peuvent être utilisées en toute sécurité.
Les fonctions Clockdiff() et clockdiff() trouvent la différence entre deux temps, arrondie à l’entier inférieur, dans l’unité de votre choix, avec et sans secondes intercalaires, respectivement. Clockdiff_frac() et clockdiff_frac() trouvent cette différence plus précisément. Si vous avez enregistré les horodatages (avec les secondes intercalaires) lorsque les objets célestes commencent et terminent une orbite complète (comme les variables Stata begin et end), cela générera les périodes orbitales en jours.
. generate double period = Clockdiff_frac(begin, end, "day")
Dates relatives
Nous comprenons tous des chaînes de caractères comme « 4 juillet 1776 ». Mais Stata a besoin d’une représentation plus souple qui permette, par exemple, de calculer des différences. Stata conserve en fait les dates sous forme de nombres – le nombre de jours par rapport à un point de référence que nous avons choisi : le 1er janvier 1960. Pour les temps, il s’agit du nombre de millisecondes à partir du coup de minuit du 1er janvier 1960.
Nous ne nous attendons pas à ce que les utilisateurs ajoutent ou soustraient ces chiffres incompréhensibles, mais nous rendons possible le calcul des dates Stata, par rapport à d’autres dates. Nous gérons maintenant les anniversaires par rapport à une date donnée, et les dates par rapport au mois d’une date donnée.
La fonction birthday() vous indique la date d’anniversaire, sous forme de date Stata, pour une année donnée. previousbirthday() et nextbirthday() renvoient les dates Stata pour l’anniversaire précédent et suivant, respectivement, par rapport à une date donnée.
Les fonctions daysinmonth(), firstdayofmonth() et lastdayofmonth() trouvent d’abord le mois d’une date Stata donnée et renvoient, respectivement, le nombre de jours de ce mois, la date Stata du premier jour de ce mois et la date Stata du dernier jour de ce mois.
Cet ennuyeux jour bissextile apparaît environ tous les quatre ans depuis 1582, date à laquelle le pape Grégoire XIII a établi le calendrier grégorien, aujourd’hui largement utilisé, en modifiant le calendrier julien (pape Grégoire XIII, 1582). Cette modification a permis de corriger l’hypothèse erronée selon laquelle l’année moyenne dure exactement 365,25 jours et de faire en sorte que Pâques se déroule plus près du moment où elle devrait avoir lieu, c’est-à-dire à l’équinoxe de mars. Le calendrier grégorien a réformé le calendrier julien en supprimant les années bissextiles dans les siècles qui n’étaient pas exactement divisibles par 400.
Les fonctions isleapyear(), previousleapyear(), et nextleapyear() prennent une année en entrée et sont douloureusement évidentes quant à ce qu’elles font.
References
Pape Grégoire XIII. 1582. Inter gravissimas.
Sullivan, A. 1923. Les Pirates de Penzance ou l’esclave du devoir, livret de W.S. Gilbert, G. Schimer.