添加几个数据集后,我的日期为%tm
格式或YYYYmMM。我想将它们转换为一种形式,我可以将月份和年份分开,以便每季度制作一次数据。但是,当我尝试将其更改为其他日期格式时,所有年份都显示为1961年。尝试format %tq
提供了错误的数据,以及year(date)
和month(date)
函数。当我将它们转换为字符串时,它们会以300到20000之间的数字出现,但随后这些奇怪的数字转换回显示正确的年份和月份,使用format %tm
时。知道发生了什么以及如何解决这个问题?
答案 0 :(得分:2)
您在此处提到了几个相关问题,但没有给出示例显示您使用的确切代码或您的实际数据。严格来说,这会使你的问题偏离主题,因为在你的问题中没有任何可重复的例子。仍然可以进行一些诊断。
这里的关键谬误是
指定特定日期显示格式定义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