我目前正在尝试将日期格式从“2010-01-11 00:00:00”更改为“01-11-2010”或“2010年1月11日”。目前“2010-01-11 00:00:00”是字符串格式。我试图强制使用date()
函数,但它永远不会回到Stata可以识别和排序的程度。有人会知道怎么做吗?
答案 0 :(得分:3)
如果您将来的问题发布尝试的代码以及为什么它不适合您,那将是最好的。
也许这适用于你的情况:
clear all
set more off
*----- example data -----
set obs 1
gen dat = "2010-01-11 00:00:00"
describe
list
*----- what you want -----
gen double dat2 = clock(dat, "YDM hms")
format dat2 %tcDD-NN-YY
describe
list
请注意,我们从字符串类型转换为数字类型(double),然后调整显示格式。
请参阅help format
,help datetime
和help datetime_display_formats
。
另请阅读:
Stata提示113:更改变量的格式:它的作用和含义 N. J.考克斯。 2012。 Stata Journal第12卷第4期。 http://www.stata-journal.com/article.html?article=dm0067
答案 1 :(得分:2)
如果您在" 2010-01-11 00:00:00"中提取时间数据(SQL)格式,然后默认情况下它作为str23
被摄取到Stata中如果您希望将其作为Stata日期格式进行操作,可以尝试以下操作(ingested_date_1 ...作为您的日期列)
foreach sqltime in ingested_date_1 ingested_date_2 {
rename `sqltime' X
generate double `sqltime' = clock(X, "YMD hms")
drop X
format %tcDDmonCCYY_HH:MM:SS `sqltime'
}
这需要多个"日期",只需使用ingested_date_1 ingested_date_2等替换您的列名,然后重新格式化它们并保留其原始数据'名称
现在,日期采用stata识别的时间格式%tc
,基于时钟,这将按照您期望的时间顺序排序,而不是不符合摄取的字符串。
此外,您现在可以将日期的显示格式重新格式化为您想要或正在阅读的内容,尽管它对日期操作没有任何影响,它只是显示的外观,在查看为&#34的情况下; 01-11-2010"
罗伯托说格式ingetsed_date_i%tcDD-NN-YY