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: best practice for dates and times

From   Nick Cox <>
To   "''" <>
Subject   RE: st: best practice for dates and times
Date   Mon, 21 Feb 2011 19:17:22 +0000

Good question. There appears to be some switch in the code and I don't know what it is. 

As said, I'd be surprised if the switch was -replace- detecting the use of -clock()- but I might well be wrong. 

Here is another experiment. If you also go 

gen byte x2 = 1 
replace x2 = x 

-x2- is also replaced as double. In what sense does the second -replace- also know that its argument came from a -clock()- calculation, as you seem to be supposing? I doubt that it does, but any amount of guesswork can only be settled by looking at the source code. 


Liao, Junlin


How do you explain the following? I found out that it does not matter if you set type to float or double. -replace- always promote decimal numbers to float for most of calculations. However, for -clock()- results, it chooses double. If you and Nick are correct, then the results should be consistently of one type or the type according to setting.

. clear

. set type float

. set obs 1
obs was 0, now 1

. gen byte x=1

. replace x=clock("1may2001 1:20","DMY hm")
x was byte now double
(1 real change made)

. gen byte y=1

. replace y=2.123456^3
y was byte now float
(1 real change made)

. des

Contains data
  obs:             1
 vars:             2
 size:            16 (99.9% of memory free)
              storage  display     value
variable name   type   format      label      variable label
x               double %8.0g
y               float  %8.0g
Sorted by:
     Note:  dataset has changed since last saved


-----Original Message-----
From: [] On Behalf Of Maarten buis
Sent: Monday, February 21, 2011 12:45 PM
Subject: RE: st: best practice for dates and times

---  Liao, Junlin
> Please note in previous code I had intentionally set type to float.
> -replace- still choose double for results of -clock-. Suppose I do
> another calculation, -replace- will choose float. Therefore, -replace-
> must know about -clock-.

--- On Mon, 21/2/11, Nick Cox wrote:
> As I understand it, -replace- looks at values, not what produced them.
> If it sees a particular number that should be stored as -double-, it
> is not because it comes tagged with a history "produced by -clock()-;
> act accordingly".

Nick seems to be right, -replace- will increase the storage type regarless of what function produced it, just not float, which I think is a sensible default given what was said before.

set obs 1
gen byte foo = 1
replace foo = 10000

*   For searches and help try:

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