使用Stata对时间变量进行反字符串处理 [英] Destring a time variable using Stata

查看:12
本文介绍了使用Stata对时间变量进行反字符串处理的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

我已经尝试了destring:但是,:阻止destring。然后我尝试了destring, ignore(:),但无法进行double和/或format %tcencode不起作用;recast不起作用。

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

我是不是错过了可以将这两个字符串变量(一个日期、一个时间)合并为日期/时间变量,或者destring分别将它们合并为日期/时间变量是否正确?

推荐答案

简明答案

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

 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等等,这对于时间或日期来说通常是非常错误的。

    /li>
  • destring正如您所应用的,它意味着字符串时间"7:00"、"7:59"、"8:00"应该是数字的,除非有人愚蠢地添加了不相关的标点符号。但如果去掉冒号:,就会得到700、759、800等倍,这与时间的标准属性不匹配。例如,"8:00"和"7:59"之间的差异显然是一分钟,但删除信息性标点符号只会得到数字800和759,两者相差41,这是没有意义的。

对于纯时间,您可以设置自己的系统,或使用Stata的日期时间函数。

对于"00:00"和"23:59"之间的时间,您可以使用Stata的Date-Times:

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

然而,尽管您有标题,但这里的真正问题似乎是联合处理日期和时间信息,而不仅仅是时间信息,所以现在,您可能想再读一遍简短的答案。

这篇关于使用Stata对时间变量进行反字符串处理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆