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 |
+------------------------------------------+
我正在尝试将数据除以某个日期时间。
例如,我从最初的字符串 "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 |
+------------------------------------------+