使用Stata销毁时间变量

使用Stata销毁时间变量,stata,Stata,如何使用Stata对时间变量(7:00)进行分解 我尝试过解压:但是:阻止解压。然后我尝试了destring,ignore(:),但无法进行double和/或format%tc编码不起作用重铸不起作用 我还有一个单独的字符串日期,我可以destring并将其转换为double 我是否忽略了将这两个字符串变量(一个日期,一个时间)组合成一个日期/时间变量,或者将它们分别分解,然后组合成一个日期/时间变量是正确的 首先给出底线:两个包含日期和时间信息的字符串变量可以使用如下操作转换为单个数字日期时间

如何使用Stata对时间变量(7:00)进行分解

我尝试过
解压
:但是
阻止
解压
。然后我尝试了
destring,ignore(:)
,但无法进行
double
和/或
format%tc
<编码>编码不起作用<代码>重铸不起作用

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


我是否忽略了将这两个字符串变量(一个日期,一个时间)组合成一个日期/时间变量,或者将它们分别分解,然后组合成一个日期/时间变量是正确的

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

 generate double datetime = clock(date + time, "DMY hm") 
 format datetime %tc 
但具体细节将取决于你的约会方式

要理解Stata中的日期和时间,没有什么可以替代

帮助日期和时间

正如你的经验所显示的那样,其他尝试过的一切都可能是错误的或不相关的,或者两者都是

更长的回答,消除误解

destring
encode
recast
在Stata中将字符串日期和/或时间转换为数字日期和/或时间时,几乎总是完全错误的。(我可以想到一个例外:如果以某种方式将年份中的日期作为字符串导入,并带有值“1960”、“1961”等,那么
销毁
就可以了。)

按相反的顺序

  • recast
    不适用于任何类型的数字到字符串或字符串到数字的转换。它只在数值类型或字符串类型之间重铸
s

  • 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
    
    对于变量,您需要
    生成一个新变量,并确保它被创建为
    double

    少于24小时的纯时间(理论上)是1960年1月1日的时间,但你可以忽略这一点。但是您需要记住(经常!)基本的数字单位是毫秒。只有这种格式才能给你一个传统意义上的时间

    如果你的时间超过24小时,这可能不是一个好主意

    您自己的系统可以将格式为“hh:mm”的字符串时间转换为分钟,并用这些术语进行计算。对于作为变量保存的时间,最简单的方法是使用
    split,destring
    生成保存小时和分钟的数字变量,然后使用60*hours+minutes

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