【问题标题】:Change Type and Format of date while preserving display在保留显示的同时更改日期的类型和格式
【发布时间】:2026-02-24 12:40:01
【问题描述】:

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

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

【问题讨论】:

  • 如果您提供某种解决方案尝试并指出您已经尝试过的内容,您将在 * 上走得更远。
  • 欢迎来到 Stack Overflow!请阅读How to Ask 并始终使用Stata 中的dataex 命令提供minimal reproducible example

标签: date types format stata


【解决方案1】:

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

为此,您需要使用daily() 函数而不是destringencode 命令(有关后者的不当之处的讨论,请参阅this question)。

例如:

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

【讨论】:

  • 太棒了。我想要所有的数字,所以这是完美的。感谢您的帮助!