将日期变量转换为数字
Convert date variable to numeric
感觉像是一个显而易见的问题,但 Stata 帮助没有给出答案。大多数 Stata 用户都对将非日期变量转换为日期变量感兴趣,但我想要相反的结果。
我有一个日期变量 date
,类型长,格式 %tdCCYYNN
。我试图将它附加到一个数据集,其中相同的变量 date
的类型为 long 且格式为 %12.0g
。为了准确地做到这一点,我需要将第一个数据集中的 date
从 %tdCCYYNN
转换为 %12.0g
。当我执行 format %12.0g date
时,date
值变为不正确的值。
比方说,在第一个数据集中,我有 date=201204
。我仍然希望它读作 201204
,就像 %12.0g
变量一样。有办法吗?
我 +1 Nick 和 William 以上所有评论,并建议您阅读 help datetime
。我已经使用 Stata 几年了,仍然经常访问这个帮助文件。 Stata 的 date/time 功能非常棒,早点学习它会让您受益匪浅。
我会将其他数据转换为 Stata 日期格式。 真的。但是,如果您需要将 %td
日期转换为 "integer YYYYNN" 日期,则通过一个临时文件。如果您将 %td
日期写入纯文本,那么它会保持显示的格式,您可以将其作为整数 YYYYNN 日期读回。
// data that matches your decsription
clear
set obs 1
generate date = date("20120401", "YMD")
format date %tdCCYYNN
list
// write to tempfile as plain text
tempfile plainText
outsheet using "`plainText'"
// read back with dates as integers
preserve
tempfile StataData
insheet using "`plainText'", clear
rename date dateInteger
save "`StataData'"
restore
// merge to original data
merge 1:1 _n using "`StataData'"
list
describe
这会产生以下结果。
. list
+---------------------------------+
| date dateIn~r _merge |
|---------------------------------|
1. | 201204 201204 matched (3) |
+---------------------------------+
. describe
Contains data
obs: 1
vars: 3
size: 7
-----------------------------------------------------------------------------------------------------
storage display value
variable name type format label variable label
-----------------------------------------------------------------------------------------------------
date int %tdCCYYNN
dateInteger long %12.0g
_merge byte %23.0g _merge
-----------------------------------------------------------------------------------------------------
Sorted by:
Note: Dataset has changed since last saved.
但我建议您利用 Stata 的 date/time 功能。
感觉像是一个显而易见的问题,但 Stata 帮助没有给出答案。大多数 Stata 用户都对将非日期变量转换为日期变量感兴趣,但我想要相反的结果。
我有一个日期变量 date
,类型长,格式 %tdCCYYNN
。我试图将它附加到一个数据集,其中相同的变量 date
的类型为 long 且格式为 %12.0g
。为了准确地做到这一点,我需要将第一个数据集中的 date
从 %tdCCYYNN
转换为 %12.0g
。当我执行 format %12.0g date
时,date
值变为不正确的值。
比方说,在第一个数据集中,我有 date=201204
。我仍然希望它读作 201204
,就像 %12.0g
变量一样。有办法吗?
我 +1 Nick 和 William 以上所有评论,并建议您阅读 help datetime
。我已经使用 Stata 几年了,仍然经常访问这个帮助文件。 Stata 的 date/time 功能非常棒,早点学习它会让您受益匪浅。
我会将其他数据转换为 Stata 日期格式。 真的。但是,如果您需要将 %td
日期转换为 "integer YYYYNN" 日期,则通过一个临时文件。如果您将 %td
日期写入纯文本,那么它会保持显示的格式,您可以将其作为整数 YYYYNN 日期读回。
// data that matches your decsription
clear
set obs 1
generate date = date("20120401", "YMD")
format date %tdCCYYNN
list
// write to tempfile as plain text
tempfile plainText
outsheet using "`plainText'"
// read back with dates as integers
preserve
tempfile StataData
insheet using "`plainText'", clear
rename date dateInteger
save "`StataData'"
restore
// merge to original data
merge 1:1 _n using "`StataData'"
list
describe
这会产生以下结果。
. list
+---------------------------------+
| date dateIn~r _merge |
|---------------------------------|
1. | 201204 201204 matched (3) |
+---------------------------------+
. describe
Contains data
obs: 1
vars: 3
size: 7
-----------------------------------------------------------------------------------------------------
storage display value
variable name type format label variable label
-----------------------------------------------------------------------------------------------------
date int %tdCCYYNN
dateInteger long %12.0g
_merge byte %23.0g _merge
-----------------------------------------------------------------------------------------------------
Sorted by:
Note: Dataset has changed since last saved.
但我建议您利用 Stata 的 date/time 功能。