将字符串日期变量转换为数字

时间:2018-04-23 18:47:30

标签: stata

我想从numeric变量创建一个string变量:

06-08-2003
30-02-1934
19-11-1923
29-12-1945
12-04-1997 

这是我previous posts之一的string变量dates中的值。

我尝试使用encode命令,但当我尝试sort生成的date变量时,它无法按预期工作。

我做错了什么?有可能这样做吗?

1 个答案:

答案 0 :(得分:3)

您似乎想要将string变量转换为numeric变量。但是,不应使用命令encode来执行此操作。

由于@Nick Cox有commented before

  

" ...我们应该强调编码对于转换来说是一个非常非常糟糕的主意   日期字符串到数字日期变量。考虑一个带字符串的最小数据集   20apr2018和28mar1952应该很明显,这些将被编码为   1和2,因为编码使用字典规则,以便" 20"之前排序" 28"。所以   结果'日期'甚至没有正确的顺序。问题是阴险的   大多数时候,用户会看到看起来很好的价值标签,但是   在数值下面几乎总是纯垃圾。"

为了说明这一点,请考虑自己的例子:

clear

input str10 string
"06-08-2003"
"30-02-1934"
"19-11-1923"
"12-04-1997"
"29-12-1945" 
end

encode string, generate(numeric)

sort numeric
list

   +-------------------------+
   |     string      numeric |
   |-------------------------|
1. | 06-08-2003   06-08-2003 |
2. | 12-04-1997   12-04-1997 |
3. | 19-11-1923   19-11-1923 |
4. | 29-12-1945   29-12-1945 |
5. | 30-02-1934   30-02-1934 |
   +-------------------------+

你的新" date"变量未按预期排序, 是因为它本质上是一个通用numeric变量,每个值附加value label

list, nolabel

   +----------------------+
   |     string   numeric |
   |----------------------|
1. | 06-08-2003         1 |
2. | 12-04-1997         2 |
3. | 19-11-1923         3 |
4. | 29-12-1945         4 |
5. | 30-02-1934         5 |
   +----------------------+

为了创建包含日期的有效numeric变量,您需要执行的操作是使用date()或等效的daily()函数进行正确的转换:

drop numeric

generate numeric = date(string, "DMY")
format %tddd-NN-YY numeric

list

   +-----------------------+
   |     string    numeric |
   |-----------------------|
1. | 06-08-2003    6-08-03 |
2. | 12-04-1997   12-04-97 |
3. | 19-11-1923   19-11-23 |
4. | 29-12-1945   29-12-45 |
5. | 30-02-1934          . |
   +-----------------------+

sort numeric
list

   +-----------------------+
   |     string    numeric |
   |-----------------------|
1. | 19-11-1923   19-11-23 |
2. | 29-12-1945   29-12-45 |
3. | 12-04-1997   12-04-97 |
4. | 06-08-2003    6-08-03 |
5. | 30-02-1934          . |
   +-----------------------+

请注意,30-02-1934不是有效日期,因此也是相应的观察结果 numeric变量中缺少。