# Creating a time axis from time variables

## Question:

How can I create a time axis from data in a file which lists time segments as variables?

## Example:

The data set looks like this: All variables are on an abstract I axis.

```name        title       I         J         K         L

YEAR        Year        1:4320    ...       ...       ...
MONTH       Month       1:4320    ...       ...       ...
DAY         Day         1:4320    ...       ...       ...
HOUR        Hour        1:4320    ...       ...       ...
MINUTE      Minute      1:4320    ...       ...       ...
VAL         Value       1:4320    ...       ...       ...
```

We want to put variable VAL on a time axis described by YEAR, MONTH, DAY, HOUR, and MINUTE.

## Solution:

Compute time steps from YEAR, MONTH, DAY, etc. and then use them to generate a time axis. The times must be in monotonically increasing order for this to work.

```      ! Compute the time steps in units of days.
! DAYS1900() returns the number of days since 1900-01-01.

LET day_frac = (hour + minute/60 ) / 24
LET tstep = DAYS1900(year,month,day) + day_frac

! Define a time axis, ttaxis, from variable tstep

DEFINE axis/T/T0=1-jan-1900/UNIT=days ttaxis=tstep[L=1:4320]

! Define a dummy variable on the new time taxis

LET dummy=t[GT=ttaxis]

! Reshape the variable val from abstract I axis to the new T axis

LET new_val = RESHAPE(val,dummy)
```

Note that Ferret variables are represented as single precision real numbers. (Axes are represented in double precision, but we are using a variable to define the axis and that variable is single precision.) If your timestep is small, such as minutes, and your times are a century or more after 1-jan-1900, you will need to use a time origin later than 1-Jan-1900 so that the number of minutes since the origin does not exceed the precision that can be represented.

```      ! Compute the time steps in units of minutes.

LET days_2001 = DAYS1900(2001,1,1)

LET day_frac = (hour + minute/60 ) / 24
LET tstep = DAYS1900(year,month,day) - days_2001 + day_frac

! Define a time axis, ttaxis, from variable tstep

DEFINE axis/T/T0=1-jan-2001/UNIT=days ttaxis=tstep[L=1:4320]

```