如何使用 Stata 将日期和时间组合成一个变量
How to combine date and time into one variable using Stata
我的数据库是一个面板数据集,其中包含变量 name
、date
、time
。
date
的格式类似于 02jan2002。 time
是一个人为的时间戳,它的值在20到32之间,我想把date
和time
结合起来新建一个变量,所以我可以tsset
这个变量。
谁能告诉我如何组合这两个变量?
这是一种方法:
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)
这背后的想法与 Nick 的解决方案相同,但他的解决方案更有效。我将时间间隔变量转换为小时和分钟。我将这些提供给 dhms()
函数,它期望第一个参数是 %td
日期变量,第二个是小时,第三个是分钟,最后一个是秒。
到tsset
或xtset
,所有需要的数据都是整数日期或日期时间。但是在这里,您似乎在一天的大部分时间都没有进行任何观察,即每天只有 6 小时 30 分钟的观察和 17 小时 30 分钟的间隔。
您需要约定使用一次,每 30 分钟仅使用一次。选择每个时期的开始作为一个约定,您可以使用
生成日期时间
gen double datetime = cofd(date) + (time - 1) * 30 * 60000
format %tc
鉴于 date
似乎是 Stata 每日日期变量,并且 time
编码 30 分钟间隔,每分钟有 60000 毫秒。
在声明标识符和时间时,您需要指定delta(1800000)
、
如前所述,此声明使差距变得显而易见。你是否需要一个假设,即当不进行观察时时钟停止是一个悬而未决的问题。
我的数据库是一个面板数据集,其中包含变量 name
、date
、time
。
date
的格式类似于 02jan2002。 time
是一个人为的时间戳,它的值在20到32之间,我想把date
和time
结合起来新建一个变量,所以我可以tsset
这个变量。
谁能告诉我如何组合这两个变量?
这是一种方法:
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)
这背后的想法与 Nick 的解决方案相同,但他的解决方案更有效。我将时间间隔变量转换为小时和分钟。我将这些提供给 dhms()
函数,它期望第一个参数是 %td
日期变量,第二个是小时,第三个是分钟,最后一个是秒。
到tsset
或xtset
,所有需要的数据都是整数日期或日期时间。但是在这里,您似乎在一天的大部分时间都没有进行任何观察,即每天只有 6 小时 30 分钟的观察和 17 小时 30 分钟的间隔。
您需要约定使用一次,每 30 分钟仅使用一次。选择每个时期的开始作为一个约定,您可以使用
生成日期时间gen double datetime = cofd(date) + (time - 1) * 30 * 60000
format %tc
鉴于 date
似乎是 Stata 每日日期变量,并且 time
编码 30 分钟间隔,每分钟有 60000 毫秒。
在声明标识符和时间时,您需要指定delta(1800000)
、
如前所述,此声明使差距变得显而易见。你是否需要一个假设,即当不进行观察时时钟停止是一个悬而未决的问题。