Stata Date – Time calculations

Stata stores and saves date and time as numeric intervals referenced from 1 Jan 1960 (01jan1960 = 0)

When the variable is time, one should use double variable type

When variable is date, float is OK

Stata help

help datetime help datetime_translation help datetime_display_formats

The above command is your best resource!

Stata Internal Format (SIF) and Display Formats for time data

Stata stores time data with specific stata internal formats (datetime/c, date etc.) which can be formatted for display using display formats (%tC, %td etc.)

  • %tc = datetime/c – milliseconds – use “double” precision
  • %tC = datetime/C – milliseconds adjusted for leap seconds (UTC) – use “double” precision
  • %td = date – days since 01jan1960
  • %tw = weekly date – weeks since 1960w1
  • %tm = monthly date – months since 1960m1
  • %tq = quarterly date – quarters since 1960q1
  • %th = half-yearly date – half-years since 1960h1
  • %ty = yearly date – years since 0000

Code examples of creating date-time variables in stata


gen dateOfVisit= date("18/8/2010", "DMY") format dateOfVisit %td # String variable in dataset - dov , with dates written as 18/8/2010, 18-8-2020, etc gen dateOfVisit= date(dov, "DMY") format dateOfVisit %td # Three numeric variables in dataset month, date and year gen eventdate = mdy(month, date, year) format eventdate %td # Two numeric variables in dataset , date and year and one String variable month # Convert to one concatenated string variable and the convert to SIF gen str dateOfVisit_temp = month + " " + str(date) + " " + str(year) gen dateOfVisit= date(dateOfVisit_temp , "MDY") format dateOfVisit %td # Convert Stata Time variable "timeOfVisit" formated as % tc to a Stata Date variable gen dateOfVisit = dofc(timeOfVisit) format eventdate %td # Get date of surgery, given you know date of follow-up and # time between follow-up and surgery (followUpafterDays) gen dateOfVisit= date(dov, "DMY") format dateOfVisit %td gen dateOfSurgery = dateOfVisit= - followUpafterDays format dateOfSurgery %td

Extracting components from a Stata date / time variable

# Which Day of Week (DoW) was surgery done ? gen dayOfSurgery = dow(dateOfSurgery) # Which Day of month (DoW) was surgery done ? gen dayOfSurgery = day(dateOfSurgery) # OR gen int dayOfSurgery = dateOfSurgery- dofm(mofd(dateOfSurgery)) + 1 #

Weeks in Stata

Nick Cox writes on Stata List -

A Stata week starts on Sunday (dow for Sundays = 0)

Week 1 of any given calendar year begins on 1 January of that
year, regardless. So week 2 starts on 8 January, and so forth. 

There are only 52 weeks of the year, regardless. So day 365
of a year is always assigned to week 52. And day366 is also so
assigned whenever it occurs, within a leap year. So week 52 is 8 or 9
days long, always
Also see -
# Which Week of Month was surgery done ? gen week_in_month = ceil(day(dateOfSurgery)/7) # OR gen day_in_month = eventdate - dofm(mofd(dateOfSurgery)) + 1 gen week_in_month = ceil(day_in_month/7) # Which Week of year was surgery done ? gen week_in_month = week(dateOfSurgery)

gen int week_in_month = ceil(day(eventdate)/7)