短的答案
为了给底线第一:持有日期和时间信息可以用一些操作被转换为单一的数字日期时间变量等
generate double datetime = clock(date + time, "DMY hm")
format datetime %tc
两个字符串变量除了确切的细节将取决于你的日期如何举行。
对于理解日期和时间在Stata有其他用于
help dates and times
一切都无可替代尝试很可能是错误的或不相关或两者兼而有之,因为你的经验表明。
较长的答案,解决误解
destring
,encode
和recast
都(几乎总是)完全错误的在Stata为将字符串转换日期和/或时间到数字日期和/或时间。 (我能想到的一个例外:如果在某种程度上年的日期已被导入为字符串值“1960年”,“1961年”,等等。然后destring
将是非常好的)
在相反的顺序,
recast
不是任何一种数字的字符串或字符串到数字的转换。它只有数字或字符串类型之间的recast
。
encode
基本上是测绘明显串数字和(除非另行指定)会产生整数值1,2,3,等等,这将是非常错误的,一般时间或日期。
destring
就像你应用它意味着字符串时间“7:00”,“7:59”,“8:00”应该是数字,除了有人愚蠢地添加不相关的标点符号。但是,如果你带冒号:
,你会得到700倍,759,800等,这将不符合时代的标准属性。例如,“8:00”和“7:59”之间的区别显然是一分钟,但去掉信息标点符号只会产生号800和759,其由41不同,这是没有意义的。
对于纯粹的时间,您可以设置自己的系统,或使用Stata的日期时间函数。
为“00:00”之间的时间“23:59”,你可以使用的Stata的日期,时间:
. di %tc clock("7:00", "hm")
01jan1960 07:00:00
. di %tc_HH:MM clock("7:00", "hm")
07:00
有了变量,你将需要generate
一个新的变量,并确保它是创建为double
。
一个纯粹的时间不超过24小时(名义上)一1960年1月1日的时间,但你可以忽略这一点。但是你需要牢记(不断!)基础数值单位是毫秒。只有格式给你一个传统的时间。
如果你有时间超过24小时,这可能不是一个好主意。
自己的系统可能只是字符串时间转换格式为“HH:MM”到几分钟,做这些方面的计算。对于以变量形式存在的时间,最简单的方法是使用split, destring
生成包含小时和分钟的数字变量,然后使用60 *小时+分钟。
然而,尽管你的标题,真正的问题在这里似乎与日期和时间信息,而不仅仅是时间信息处理一起,所以在这一点上,你可能想再次阅读简短的回答。