Arbejd med datoer og tider i Stata

I denne artikel vil jeg gennemgå hvordan du arbejder med datoer og tider i Stata. 
Jeg gennemgik for nyligt de datatyper der findes i Stata. Som du nok har lagt mærke til her, findes der ikke en egentlig datatype til datoer eller tider i Stata. Det betyder dog ikke at du ikke kan arbejde med datoer i Stata – det anvender blot nogle af de andre datatyper.

Gem datoen eller tiden i en tekststreng

Når du skal gemme datoværdien gør du det i en tekststreng. Selve tekststrengen kan f.eks. indeholde datoer og tider der ser således ud:

  • 21nov2006
  • 13:42:02.213
  • 21nov2006 13:42:02.213
  • 11/21/2006
  • November 21, 2006
  • 1:42 p.m.

Så som du kan se, kan du stort set skrive datoer og tider som du ønsker i denne tekststreng. Når du har gemt datoen eller tiden i en tekststreng, anvender du Stata funktioner til at oversætte disse til datoværdier, der i Stata gemmes som heltal. Når du så skal bruge datoen, angiver du bare i en funktion, hvordan datoen skal fremstå.

Sådan gemmer Stata tidsværdier

Tiden 01jan1960 00:00:00.000 har i Stata tidsværdien 0. Når du så gemmer en ny tidsværdi, er denne gemt som et heltal, der angiver antallet af millisekunder siden denne tid. Hvis heltallet er negativ, er det antallet af millisekunder før denne tid.
Det betyder at tiden 21nov2006 13:42:02.213 i Stata gemmes som heltallet 1.479.735.722.213. Det bør dog bemærkes, at hvis vi tager hensyn til at tiden også indimellem bliver korrigeret i forhold til astronomiske standarder, så er tiden 23 sekunder senere og ville så have værdien 1.479.735.745.213. Med funktioner i Stata kan du oversætte en tid der hedder til begge måder at angive tiden på. Hvis tiden gemmes uden korrigering for astronomiske forhold, kaldes det en %tc variabel og hvis tiden gemmes med korrigering for astronomiske forhold, kaldes det en %tC variabel.
Fordelen ved at tider er gemt som heltal, er at det er nemt at lægge tider sammen. F.eks. er 24 timer jo 86.400.000 millisekunder, så du kan på den måde nemt lægge et døgn til en dato.

Andre tidsværdier i Stata

Udover %tc og %tC variabler, der gemmer tiden i millisekunder er det også muligt at gemme tiden på andre måder:

  • %tc gemmer tiden i millisekunder uden korrigering for astronomiske forhold siden 1. januar 1960.
  • %tC gemmer tiden i millisekunder med korrigering for astronomiske forhold siden 1. januar 1960.
  • %td gemmer tiden i dage siden 1. januar 1960.
  • %tw gemmer tiden i uger siden 1. uge i 1960.
  • %tm gemmer tiden i måneder siden januar 1960.
  • %tq gemmer tiden i kvartaler siden 1. kvartal i 1960.
  • %th gemmer tiden i halvår siden 1. halvår i 1960.
  • %ty gemmer tiden i år siden år 0 (bemærk at værdien 1960 her faktisk betyder år 1960).

Oversæt strenge med tider til tidsværdier

Som nævnt gemmer du selve datoen eller tiden som en tekststreng. Du anvender så en funktion i Stata til at oversætte det til en tidsværdi. Der findes en funktion til hver tidsværdi og i hver funktion er argumentet hvilken tekststreng tiden findes i og formatet for hvordan tiden er skrevet (kaldes også for mask).

  • clock(string, mask) oversætter en streng til %tc.
  • Clock(string, mask) oversætter en streng til %tC.
  • date(string, mask) oversætter en streng til %td.
  • weekly(string, mask) oversætter en streng til %tw.
  • monthly(string, mask) oversætter en streng til %tm.
  • quarterly(string, mask) oversætter en streng til %tq.
  • halfyearly(string, mask) oversætter en streng til %th.
  • yearly(string, mask) oversætter en streng til %ty.

Tidsformater

Som du kan se er et af argumenterne tidsformatet af strengen – det der også kaldes for mask. Dette kender du også fra andre programmeringssprog, som for eksempel PHP. Årsagen er at tider ofte kan angives på flere måder. For eksempel kan 10-11-10 jo både betyde den 10. november 2010 og den 11. oktober 2010. Derfor er du nødt til at angive hvilket format du har skrevet tiden i.
For datoer, hvor du bruger funktionen date, kan du som mask derfor angive “DMY” hvis datoen er skrevet i rækkefølgen dato, måned og år og “MDY” hvis datoen er skrevet i rækkefølgen måned, dato og år.
Generelt er der følgende forkortelser for tidsformater:

  • D = dato
  • M = måned
  • Y = år
  • h = time
  • m = minut
  • s = sekund
  • W = uge
  • Q = kvartal
  • H = halvår

Hent tidskomponent ud af tid

Hvis du har en bestemt tid gemt som en tidsværdi, kan du med disse funktioner trække en bestemt komponent ud af tiden:

  • year(date) giver året for tidsværdien gemt i date.
  • month(date) giver måneden for tidsværdien gemt i date.
  • day(date) giver datoen i en måned for tidsværdien gemt i date.
  • halfyear(date) giver halvåret i et år for tidsværdien gemt i date.
  • quarter(date) giver kvartalet i et år for tidsværdien gemt i date.
  • week(date) giver ugenummeret for tidsværdien gemt i date.
  • dow(date) giver ugedagsnummeret i en uge, hvor søndag=0, mandag=1 osv. for tidsværdien gemt i date.
  • doy(date) giver dagsnummeret i et år for tidsværdien gemt i date.

Konverter mellem tidsværdier

Der findes også funktioner, der kan konvertere en tidsværdi af en bestemt type til en anden type:

  • cofd() konverterer fra %td til %tc.
  • dofc() konverterer fra %tc til %td.

Jeg håber dette gav dig et overblik over hvordan du arbejder med datoer og tider i Stata. En af de tidsværdier jeg ikke har nævnt er %tb, der er en brugerdefineret tidsværdi, som blandt andet kan bruges til at beregne arbejdsdage. Men det bliver i en anden artikel.

0 0 votes
Article Rating

Andreas Andersen

Forfatter og grundlægger af IT-blogger.dk, der har blogget om IT-emner siden 2012. Findes på Mastodon på @aphandersen@ansico.dk

You may also like...

Abonner
Giv besked ved
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x