Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Stata:双精度的日期比较_Stata - Fatal编程技术网

Stata:双精度的日期比较

Stata:双精度的日期比较,stata,Stata,我想把数据除以某个日期时间 例如,我从最初的字符串“2019-10-15 20:33:04”创建了e_time 为了从包含h:m:s的字符串中获取所有信息,我使用以下命令创建一个double gen double e_time = clock(event_timestamp, "YMDhms") 现在,我从格式e_time%tc(人类可读)中得到了我想要的结果, 我想生成一个新变量任何大于2019-10-15的变量都是1,小于该变量的变量都是0 我试过了 // 1 g

我想把数据除以某个日期时间

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

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

gen double e_time = clock(event_timestamp, "YMDhms")
现在,我从
格式e_time%tc
(人类可读)中得到了我想要的结果, 我想
生成一个新变量
任何大于2019-10-15的变量都是1,小于该变量的变量都是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"
但它不起作用


任何人都可以就如何正确比较双精度格式的日期给出建议吗?

您的帖子有点难理解(一个可复制的数据示例会很有帮助),但错误的
类型不匹配
是因为
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 |
     +------------------------------------------+

非常感谢你的建议!但是,我需要将h:m:s部分专门保留在result datetime中,然后进行比较。似乎当前日期时间忽略了h:m:s部分。输入str20 datetime“2019-10-14 20:33:04”“2019-10-14 20:33:04”gen double date=clock(datetime,“YMDhms”)gen group=0 if date<“2019-10-15”replace group=1 if date>“2019-10-15”正是我想要做的,但正如您所看到的,我已经创建了一个日期对象作为double,这会导致类型不匹配问题。。如果我把你弄糊涂了,请原谅,我会一如既往地帮助你。我已经编辑掉了一个指示符变量不必要的
generate replace
两步操作。在一行中做这件事在很多地方都有解释,比如和@LeeVincent,是的,这不起作用,因为你要把一个数值变量和一个字符串进行比较。你试过我答案中的答案了吗?最后一个
generate
语句中的
mdy()
函数是关键。谢谢你,尼克,很容易知道。干杯。谢谢@Nick Cox和@Cybernike!1) @Nick,我其实不知道用一行就可以做到,但多亏了你的推荐,现在我发现生成-替换两步流程是不必要的。非常感谢。2) @Cybernike是的,我做了,特别是它也适用于整个数据集。我真的不知道substr()能做什么,所以我花了一段时间才真正理解运行代码时发生的事情。但现在我知道了!我是斯塔塔的新手,实际上我从这条线索中学到了很多。感谢大家分享您的知识:)在这里学习如何显示代码并不难。为代码行缩进4个空格;在提到代码时使用反勾号。(以编辑为例)在计算中,“格式”一词过载,这不是您的错,但请注意,在Stata
double
中,它是一种变量或存储类型,而不是一种显示格式。“双重格式”的表达可以在心里翻译,但在Stata问题中使用Stata术语始终是最好的主意。@NickCox非常感谢您的澄清。另外,您建议的关于消除冗余生成替换的参考资料非常有用!谢谢:)
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 |
     +------------------------------------------+