我的数据库是一个面板数据集,其中包含变量name
,date
,time
。
date
的格式如下所示02jan2002。 time
是一个人工时间戳,其值介于20和32之间。我想合并date
和time
并创建一个新变量,因此我可以tsset
这个变量。
有人能告诉我如何将这两个变量结合起来吗?
答案 0 :(得分:1)
这是一种方法:
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
日期变量,第二个参数为小时,第三个为分钟,最后一个为秒。
答案 1 :(得分:1)
要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)
,
如上所述,这一宣言显而易见。你是否需要一个在没有观察时停止时钟的小说是一个悬而未决的问题。