【问题标题】:Accurately converting date from %tm to date in stata将日期从 %tm 准确转换为 stata 中的日期
【发布时间】:2014-06-17 15:26:32
【问题描述】:

添加多个数据集后,我的日期为 %tm 格式,即 YYYYmMM。我想将它们转换为可以拆分月份和年份的形式,以便按季度制作数据。但是,当我尝试将它们更改为其他日期格式时,所有年份都显示为 1961。尝试format %tq 给出了不正确的数据,以及year(date)month(date) 函数。当我将它们转换为字符串时,它们会出现从 300 到 20000 的数字,但是当使用 format %tm 时,这些奇怪的数字会转换回显示正确的年份和月份。知道发生了什么以及如何解决这个问题吗?

【问题讨论】:

标签: date stata


【解决方案1】:

您在这里提到了几个相关的问题,但没有给出显示您使用的确切代码或真实数据的示例。严格来说,这会使您的问题在这里偏离主题,因为在您的问题中没有什么比得上可重现的示例。尽管如此,一些诊断是可能的。

这里的主要谬误是

  • 分配特定的日期显示格式定义了一个Stata日期

  • 因此更改显示格式会更改 Stata 日期类型。

绝对不是!例如,假设我有一个数字 42。如果我为它分配日期格式 %td%tm%tq,我会显示不同的日期,但最多一个可以是正确的,因为除了显示格式我什么都没改变:

. di %td 42
12feb1960

. di %tm 42
1963m7

. di %tq 42
1970q3

因此,更改显示格式而不更改值通常只是废话。

最重要的是,如果您有每月日期,year()month() 没有额外的功能就无法提供帮助,因为它们会从 每日 日期中提取年份和月份。

这很棘手,但在help dates and times 上都有详细记录,只是比大多数人想要阅读的更详细,因为您必须略读并跳过任何不适用于您当前需要的内容。

据我了解,简而言之,您的问题是将每月日期转换为季度日期,因此您不需要提取月份和年份,尽管这是一种方法。

我会打电话给dofm(),然后是qofd()

. di %tm 42
1963m7

. di qofd(dofm(42))
14

. di %tq qofd(dofm(42))
1963q3

这些函数的作用是改变(大多数)值,然后可以分配适当的显示格式。

如您所见,这里的战略建议是使用 display 手动尝试解决方案。

如果偏离目标,您可能需要提供真实数据和代码详细信息,而不仅仅是在不完整的描述中提及您使用的内容。

注意。对于大多数 Stata 用户来说,20000 年不是一个合理的月度日期,因为它是未来 1600 多年的时间:

. di %tm 20000
3626m9

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    • 2017-10-02
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多