将日期变量转换为数字

时间:2016-07-15 18:51:00

标签: date datetime stata variable-types

感觉就像一个明显的问题,但Stata的帮助并没有产生答案。大多数Stata用户都希望将非日期变量转换为日期变量,但我希望相反。

我有一个日期变量date,类型为long,格式为%tdCCYYNN。我尝试将其附加到数据集中,其中同一变量date的类型为long,格式为%12.0g。要准确地执行此操作,我需要将第一个数据集中的date%tdCCYYNN转换为%12.0g。当我执行format %12.0g date时,date值会更改为不正确的值。

让我们说,在第一个数据集中,我有date=201204。我仍然希望它只是201204变量来阅读%12.0g。有没有办法做到这一点?

1 个答案:

答案 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的日期/时间功能。