在Stata中转换字符串每月日期

特克斯

我在Stata中遇到日期格式的问题。我相信这是一个非常简单的问题,但我看不到如何解决。

我有一个看起来像的csv文件(file.csv)

v1            v2
01/01/2000    1.1
01/02/2000    1.2
01/03/2000    1.3
...    
01/12/2000    1.12
01/02/2001    1.1
...
01/12/2001    1.12

v1的形式为dd / mm / yyyy。

我使用以下方式在Stata中导入文件 import delimited ...file.csv

v1是一个字符串变量,v2是一个浮点数。

我想在Stata可以阅读每月日期中转换v1

我的尝试:

1)

gen Time = date(v1, "DMY")
format Time %tm

这给了我

Time
3177m7
3180m2
3182m7
...

看起来错了。

2)替代

gen v1_1=v1
replace v1_1 = substr(v1_1,4,length(v1_1))
gen Time_1 = date(v1_1, "MY")
format Time_1 %tm

得出完全相同的结果。

如果我输入

tsset Time, format(%tm)

它告诉我,数据中有空白,但没有空白。

您能帮我了解我做错了什么吗?

克里斯

Stata拥有有关日期和时间的出色文档,如果您计划使用与时间相关的变量,则应从头到尾阅读。阅读本文档不仅可以解决您当前的问题,而且还可以防止将来发生代价高昂的错误。与您的问题有关的部分标题为“ SIF到SIF转换”。SIF的意思是“ Stata内部形式”。

要说明您当前的问题,请执行以下操作:

Stata将日期存储为数字;您在分配格式时将其解释为“日期”。考虑以下:

set obs 1
gen dt = date("01/01/2003", "DMY")
list dt
// 15706

因此,该日期被分配了值15706。让我们将其设置为一天的格式:

format dt %td
list
// 01jan2003

现在,将其格式化为一个月:

format dt %tm
list
// 3268m11

请注意,这dt只是一个数字,您可以格式化和使用它,例如一天或一个月。要从“天数”中获取“月数”,请执行以下操作:

gen mt = mofd(dt)  // mofd = month of day
format mt %tm
list
//      dt       mt
// 3268m11   2003m1

变量mt现在等于516。2003年1月是从1960年1月起的516个月。Stata的“时代”是1960年1月1日00:00:00.000。日期变量存储为从纪元时间开始的天数,而datetime变量存储为以纪元时间开始的毫秒数。可以将一个月变量存储为从纪元时间开始的月份(这就是%tm格式确定显示哪个月份的方式)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章