Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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
Date Stata:向日期变量添加数字_Date_Time_Stata_Clock - Fatal编程技术网

Date Stata:向日期变量添加数字

Date Stata:向日期变量添加数字,date,time,stata,clock,Date,Time,Stata,Clock,我正在处理住院数据,住院日期和出院日期的信息以时钟格式%tcCCYY-NN-DD_hh:MM_am存储,例如 discharge date 2009-04-21 9:00 AM 因此,从1960年1月1日起,数据信息以毫秒的形式存储,将其转换为数字双变量 discharge date 1556269200000 现在,我想将一些日期变量移动1分钟(只是一个示例),并生成一个新变量 gen new_discharge_date = discharge_date + 60*1000 这只会

我正在处理住院数据,住院日期和出院日期的信息以时钟格式%tcCCYY-NN-DD_hh:MM_am存储,例如

  discharge date
2009-04-21 9:00 AM
因此,从1960年1月1日起,数据信息以毫秒的形式存储,将其转换为数字双变量

discharge date
1556269200000
现在,我想将一些日期变量移动1分钟(只是一个示例),并生成一个新变量

gen new_discharge_date = discharge_date + 60*1000
这只会使出院日期顺延一分钟

在上面的例子中,这将给我

new_discharge_date 
2009-04-25 9:00 AM
还是双倍

new_discharge_date
 1556269236224
新的卸货日期和卸货日期之间的差值仅为36224毫秒,而不是60000毫秒

这个问题是系统性的,有时自1960年1月1日以来的毫秒数甚至会比以前更低


知道我做错了什么吗?

执行摘要:向日期时间变量添加一个以毫秒为单位的常数会创建另一个日期时间变量。两个变量的类型均应为
double

首先请注意,时钟不是Stata中的存储格式。时钟日期时间变量存储为整数;时钟格式是一种数字显示格式,这是完全不同的。事实上,原始问题中的描述是反向的:日期-时间数据以字符串形式到达,然后使用
clock()
函数将其转换为毫秒

时钟日期时间应该存储为
double
s,这是正确的,因为它们通常是非常大的整数,但正是出于这个原因,移位的日期时间(比原始值多1分钟)不应该存储在
float
中,这是
生成的默认值。您需要在
generate
语句中指定
double
。使用
float
只会给出一个粗略的近似值,这就是您观察错误的原因。使用您的示例作为沙箱很容易检查

. clear

. set obs 1 
number of observations (_N) was 0, now 1

. gen s_discharge_date = "2009-04-21 9:00 AM"

. gen double discharge_date = clock(s_discharge_date, "YMD hm") 

. format discharge_date %tc 

. gen double new_discharge_date = discharge_date + 60*1000

. format new %tc

. gen long new_discharge_date2 = discharge_date + 60*1000

. format new_discharge_date2 %tc

. list 

     +--------------------------------------------------------------+
  1. |   s_discharge_date |     discharge_date | new_discharge_date |
     | 2009-04-21 9:00 AM | 21apr2009 09:00:00 | 21apr2009 09:01:00 |
     |--------------------------------------------------------------|
     |                           new_di~2                           |
     |                                  .                           |
     +--------------------------------------------------------------+

上一次实验立即表明,注释中给出的使用
long
的建议是错误的。最近的日期时间值以万亿为单位,比
长的
时间要大一些数量级<代码>帮助数据类型
显示各种类型的值限制

时间戳应以long而不是double格式存储。另外,尝试使用一些括号:gen new_discharge_date=discharge_date+(60*1000)并非如此<代码>长
在这里是不够的。看看我的答案。(括号很好,但只是装饰性的。)