我有一个变量ShiftStart
,它是01jan2014 06:59:59
格式的数字变量(依此类推)。我想将其更改为字符串变量,以便我可以将其子串,并根据日期和时间分别创建变量。
当我尝试
时generate str20 string_shiftstart=string(ShiftStart)
我创建了一个字符串,但所有单元格都已转换为奇怪的值(“1.70e + 12”等等)。
如何将ShiftStart
转换为字符串时保留原始内容?
答案 0 :(得分:2)
您似乎有一个格式为 datetime 的变量。如果是这样,则无需转换为字符串。有适当的函数可以让你操作原始变量。这在help datetime
:
clear
set more off
*----- example data -----
set obs 5
gen double datet = _n * 100000000
format datet %tc
list
*----- what you want -----
gen double date = dofc(datet)
format %td date
gen double hour = hh(datet) + mm(datet)/60 + ss(datet)/3600
list
您发现原始结果令人惊讶的原因是您不知道 datetime 显示格式的基础是数值。
良好的阅读(help datetime
除外)是
Stata tip 113: Changing a variable's format: What it does and does not mean,The Stata Journal,作者:Nicholas J. Cox。
回答你的上一个问题:
如果要创建标记前/后期间的指示符变量,则一种方法是使用td()
(请参阅help
文件)。按照上面给出的例子:
// before 04jan1960
gen pre = date < td(04jan1960)
并不总是需要创建此指标变量。大多数命令允许使用if
限定符,您可以直接插入条件。请参阅help if
。
如果你的意思是别的,你应该更明确。