在 Stata 中将数字更改为字符串变量

Changing a numeric to a string variable in Stata

我有一个变量 ShiftStart,它是一个格式为 01jan2014 06:59:59 的数字变量(依此类推)。我想将它更改为一个字符串变量,这样我就可以对其进行子字符串化,并分别根据日期和时间创建变量。

当我尝试时

generate str20 string_shiftstart=string(ShiftStart)

我创建了一个字符串,但所有单元格都已转换为奇怪的值(“1.70e+12”等)。

ShiftStart转成字符串后如何保留原来的内容?

您似乎有一个格式为 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,Stata 期刊,作者:Nicholas J. Cox。

编辑

回答你的最后一个问题:

如果您想要创建标记 pre/post 个周期的指标变量,一种方法是使用 td()(请参阅 help 文件)。按照上面给出的例子:

// before 04jan1960
gen pre = date < td(04jan1960)

并非总是需要创建此指示变量。大多数命令都允许使用 if 限定符,您可以直接插入条件。参见 help if

如果你有别的意思,你应该更明确。