感觉就像一个明显的问题,但Stata的帮助并没有产生答案。大多数Stata用户都希望将非日期变量转换为日期变量,但我希望相反。
我有一个日期变量date
,类型为long,格式为%tdCCYYNN
。我尝试将其附加到数据集中,其中同一变量date
的类型为long,格式为%12.0g
。要准确地执行此操作,我需要将第一个数据集中的date
从%tdCCYYNN
转换为%12.0g
。当我执行format %12.0g date
时,date
值会更改为不正确的值。
让我们说,在第一个数据集中,我有date=201204
。我仍然希望它只是201204
变量来阅读%12.0g
。有没有办法做到这一点?
答案 0 :(得分:2)
我给Nick和William上面的所有评论+1,并建议你阅读help datetime
。我已经使用Stata几年了,仍然经常访问这个帮助文件。 Stata的日期/时间功能非常棒,您可以从早期学习而不是以后学习中受益。
我会将其他数据转换为Stata日期格式。 <强>真即可。但是,如果您需要将%td
日期转换为&#34;整数YYYYNN&#34;日期,然后通过临时文件。如果您将%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的日期/时间功能。