【问题标题】:How to combine date and time into one variable using Stata如何使用Stata将日期和时间组合成一个变量
【发布时间】:2015-07-04 09:09:45
【问题描述】:

我的数据库是一个面板数据集,其中包含变量namedatetime

date 的格式类似于 02jan2002。 time是一个人工时间戳,其值在20到32之间。我想将datetime结合起来创建一个新变量,所以我可以tsset这个变量。

谁能告诉我如何组合这两个变量?

【问题讨论】:

  • 您需要告诉我们20到32的小时和分钟是什么意思;真的不明显。
  • 我把一天分成 48 个半小时。 1 表示 0:00 -0:30。 20 表示 9:30-10:00。同样,32代表15:30-16:00之间的时间间隔。

标签: stata


【解决方案1】:

tssetxtset 所需的数据是整数日期或日期时间。但是在这里,您似乎在一天中的大部分时间都没有观察到,即每天只有 6 小时 30 分钟的观察时间和 17 小时 30 分钟的间隙。

您需要约定使用一次,并且每 30 分钟仅使用一次。选择每个时期的开始作为一个约定,您可以使用

生成日期时间
gen double datetime = cofd(date) + (time - 1) * 30 * 60000
format %tc 

假设date 似乎是Stata 每日日期变量,并且time 编码30 分钟间隔并且每分钟有60000 毫秒。

在声明标识符和时间时,您需要指定delta(1800000)

如前所述,这一声明使差距显而易见。你是否需要一个在没有进行观察时时钟停止的虚构是一个悬而未决的问题。

【讨论】:

    【解决方案2】:

    这是一种方法:

    clear
    set obs 3
    gen id = _n
    expand 2
    bys id: gen date = 20200 + _n
    format date %td
    expand 13
    bys id date: gen time = _n+19
    sort id date time
    
    gen double ts = dhms(date,round((time)*30/60,1)-1,mod(time*30+30,60),0.000)
    format ts %tcDDmonCCYY_HH:MM
    tsset id ts, delta(30 minutes)
    

    这背后的想法与尼克的解决方案相同,尽管他的解决方案更有效。我将时间间隔变量转换为小时和分钟。我将这些提供给dhms() 函数,它期望第一个参数是%td 日期变量,第二个是小时,第三个是分钟,最后一个是秒。

    【讨论】:

    • 感谢您的回答。实际上,我的时间只包含 20-32 之间的值。所以 ts = dhms(date,sum(mod(time,2))-1,mod(time*30+30,60),0.000) 并没有真正起作用。请教我如何调整这段代码。
    • 新的解决方案处理得更好。
    • 答案之间有一些重叠和一些重叠,这对于具有不同优点的不同解决方案的问题来说很好。你能用文字说明你的解决方案是做什么的吗?
    猜你喜欢
    • 1970-01-01
    • 2021-10-20
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多