Bookmark and Share

Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: st: RE: changing observations under one variable

From   Nick Cox <>
To   "''" <>
Subject   RE: st: RE: changing observations under one variable
Date   Tue, 24 Apr 2012 19:35:42 +0100

There is help on dates, date formats and date functions in abundance. At some point it becomes inefficient not to read it.

I tend to type things like 

. di %tm 468

which tells me that as a monthly date 468 means January 1999. As explained in the documentation, Stata always uses the first possible date in 1960 as 0. That also can be checked 

. di %tm 0

Also, Stata won't know that 199901 means a date that is in January 1999 if you present that to Stata as a daily date, as you did. You need to convert such dates. For example, 

. di %td date("199901" + "1", "YMD")


. di %tm ym(1999, 1)

Steve Samuels and I just published a relevant Tip with various specific advice, so I won't expand further. 

SJ-12-1 dm0062  . . . . . . . . . Stata tip 105: Daily dates with missing days
        . . . . . . . . . . . . . . . . . . . . .  S. J. Samuels and N. J. Cox
        Q1/12   SJ 12(1):159--161                                (no commands)
        presents strategies for dealing with daily dates where
        some observations only provide the month and year


Rudy Hover

Thank you Nick. 
The reason I want to change the data is that I need to merge it with a dataset that contains the dates in the '199901' format. 

Because of that just displaying the data in another way won't help me out in the end. 

I used your tip to generate a variable that is just year and month
gen monthdate=mofd(date)

So now for instance 29jan1999 becomes 468 (do you know why 468?)

However if the underlying cell is in the format '199901' then the operator
gen monthdate=mofd(date)
creates a value for 199901 that equals 6567.

So then I have a mismatch, since both 29jan1999 and 199901 should be be replaced/used to create the same (new) value.

How can I let stata perform this?

On Apr 24, 2012, at 3:39 PM, Nick Cox wrote:

> You can apply a different -format- to get a display of just year and month. 
> . di %tdCCyyNN mdy(4,24,2012)
> 201204
> You can get a date variable that is just year and month by using -mofd()- as in 
> gen monthdate = mofd(date) 
> . di %tm mofd(mdy(4,24,2012))
> 2012m4
> This is all documented. 

Rudy Hover
> The variable 'date' has type -long-.
> The format is -%d-
> The label is -Date of Observation-

On Apr 24, 2012, at 2:08 PM, Nick Cox wrote:
>> The word format means so many things! "29jan1999" is not a format in the sense of -format-. It might the result of setting a particular format? 
>> Is -date- a string variable? Is it a numeric variable with a date format assigned. 
>> Do you want another string variable? Do you want a numeric variable with a specified display -format-? 

Rudy Hover

I have one variable called 'date' with observations in the format '29jan1999' until '19dec2006', so the last working day of the month, the month and then the year. I want to change this to the format '199901' or '200612', so I don't need the day anymore, only the year and then the month. Could you help me how to replace?

*   For searches and help try:

© Copyright 1996–2018 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index