在保留显示的同时更改日期的类型和格式

时间:2018-08-04 23:45:36

标签: date types format stata

我正在尝试以DDMonYYYY格式(其中Mon是三个字母的月缩写)的形式对数据集中的str9 /%9s类型的日期变量进行解串,并且我希望将其保持当前格式。

我一直在对日期所在的其他数据集执行egen newvarname = max(date),类型:int,格式:%td,并且我希望能够转换日期为字符串的数据集中的日期以相同的类型和格式,同时保留表单,因此我可以执行相同的命令。

1 个答案:

答案 0 :(得分:1)

建议不要使用字符串类型的日期。最好将日期变量从字符串转换为数字。

为此,您需要使用daily()函数而不是destringencode命令(有关后者的不适当性的讨论,请参见{{3 }}。

例如:

clear
set obs 2

generate date_string = ""
replace date_string = "29Oct2012" in 1
replace date_string = "14Jan2015" in 2

generate date_numeric = daily(date_string, "DMY")
list, abbreviate(20) noobs

  +----------------------------+
  | date_string   date_numeric |
  |----------------------------|
  |   29Oct2012          19295 |
  |   14Jan2015          20102 |
  +----------------------------+

format %tdDDMonCCYY date_numeric
list, abbreviate(20) noobs

  +----------------------------+
  | date_string   date_numeric |
  |----------------------------|
  |   29Oct2012      29Oct2012 |
  |   14Jan2015      14Jan2015 |
  +----------------------------+

然后您可以根据需要使用egen

egen date_max = max(date_numeric)
format %tdDDMonCCYY date_max
list, abbreviate(20) noobs

  +----------------------------------------+
  | date_string   date_numeric    date_max |
  |----------------------------------------|
  |   29Oct2012      29Oct2012   14Jan2015 |
  |   14Jan2015      14Jan2015   14Jan2015 |
  +----------------------------------------+

如果您坚持将所有内容都作为字符串,则可以在以后使用tostring命令:

tostring date_max date_numeric, replace format("%tdddMonCCYY") force