Stata:双重日期比较

Stata: date comparison in double

我正在尝试将数据除以某个日期时间。

例如,我从最初的字符串 "2019-10-15 20:33:04" 创建了 e_time

要从包含h:m:s的字符串中获取所有信息,我使用以下命令创建一个double

gen double e_time = clock(event_timestamp, "YMDhms")

现在我从 format e_time %tc 得到了我想要的结果(人类可读), 我想 generate 一个新变量,大于 2019-10-15 的任何值都为 1,小于 2019-10-15 的任何值都为 0。

我试过了

// 1 

gen new_d = 0 if e_time < "1.887e+12"
replace new_d = 1 if e_time >= "1.887e+12"

// 2 

gen new_d = 0 if e_time < "2019-10-15"
replace new_d = 1 if e_time > "2019-10-15"

但是,我收到一条错误消息 type mismatch

我尝试将字符串 "2019-10-15" 转换为 double \ 以使用 display 检查 1.887e+12 是否真的意味着 2019-10-15,但我不确定如何命令在这里确实有效。

无论如何我试过了

// 3 

di clock("2019-10-15", "YMDhms") 

但是没用。

谁能就正确比较 double 格式的日期提出建议?

你的 post 有点难以理解(一个可重现的数据示例会有很大帮助)但是错误 type mismatch 是因为 e_time 是数字,而 "2019-10-15" 是一个字符串。

我建议如下:

clear

input str20 datetime
"2019-10-14 20:33:04"
"2019-10-16 20:33:04"
end

* Keep first 10 characters
gen date = substr(datetime,1,10)

* Check that all strings are 10 characters
assert length(date) == 10

* Convert from string to numeric date variable
gen m = substr(date,6,2)
gen d = substr(date,9,2)
gen y = substr(date,1,4)

destring m d y, replace

gen newdate = mdy(m,d,y)
format newdate %d

gen wanted = newdate >= mdy(10,15,2019) & !missing(newdate)

drop date m d y

list

     +------------------------------------------+
     |            datetime     newdate   wanted |
     |------------------------------------------|
  1. | 2019-10-14 20:33:04   14oct2019        0 |
  2. | 2019-10-16 20:33:04   16oct2019        1 |
     +------------------------------------------+