使用Stata对时间变量进行Destring

时间:2015-05-28 12:22:52

标签: stata

如何使用Stata destring时间变量(7:00)?

我已尝试destring:但:会阻止destring。然后我尝试destring, ignore(:),但无法创建double和/或format %tcencode不起作用; recast不能胜任这项工作。

我还有一个单独的字符串日期,我可以destring并转换为double

我错过了我可以将这两个字符串变量(一个日期,一次)组合成一个日期/时间变量,或者它是单独的destring它们是正确的,然后将它们组合成一个日期/时间变量?

1 个答案:

答案 0 :(得分:1)

简短回答

首先给出底线:保存日期和时间信息的两个字符串变量可以使用某些操作转换为单个数字日期时间变量,如

 generate double datetime = clock(date + time, "DMY hm") 
 format datetime %tc 

除了确切的细节将取决于您的日期的确切方式。

为了解Stata中的日期和时间,

无法替代

help dates and times

正如您的经验所示,其他所有尝试的内容都可能是错误的或不相关的,或两者兼而有之。

更长的答案,解决误解

destringencoderecast在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 *小时+分钟。

然而,尽管你的头衔,这里真正的问题似乎是与日期和时间信息共同处理,而不仅仅是时间信息,所以在这一点上,你可能想再次阅读简短的答案。