转换日期时间数据

时间:2015-11-05 15:20:13

标签: stata

管理回答这个问题,但不是通过使用' help datetime' (已经这样做了)或者通过阅读N.Cox' Speaking Stata:关于数字和字符串'。 解决方案:

gen dob_ymd_nn = date(dob_ymd,"DMYhm")
format dob_ymd_nn %td

谢谢

我的Stata变量dob_dmy显示参与者的出生日期。不幸的是,数据库增加了时间(全部读取00:00)。它目前是一个字符串变量(str16)。当我排序时,它不会在日期排序,而是在当天排序。见下文

63. | 01/01/1975 00:00 |
64. | 01/01/1985 00:00 |
65. | 01/02/2010 00:00 |

我想放弃时间并更改格式,以便我按实际日期排序。

2 个答案:

答案 0 :(得分:1)

@Stan指出了主要思想,即必须从字符串转换为数字日期变量。 @Roberto Ferrer强调说,这一切都在Stata本身的显着位置。不需要互联网搜索。

将您的数据用作沙箱(您可以使用dataex(SSC)在以后的问题中轻松创建此类问题,并在变量名称中提示日期运行的日期,月份,年份,然后我们就可以只需忽略substr()中无用的时间,并将有用的内容传递给daily()。为了便于阅读,请添加日期format,然后根据需要sort工作。

. clear

. input str16 sdate 

                sdate
  1. "01/02/2010 00:00"
  2. "01/01/1985 00:00"
  3. "01/01/1975 00:00"
  4. end 

. gen ddate = daily(substr(sdate, 1, 10), "DMY") 

. format ddate %td

. sort ddate 

. list 

     +------------------------------+
     |            sdate       ddate |
     |------------------------------|
  1. | 01/01/1975 00:00   01jan1975 |
  2. | 01/01/1985 00:00   01jan1985 |
  3. | 01/02/2010 00:00   01feb2010 |
     +------------------------------+

答案 1 :(得分:0)

如果您将日期存储为MM / DD / YYYY格式的字符串,您将无法对它们进行排序,除了月份,日期,年份(这不是非常有用)。您需要将它们转换为日期,然后对它们进行排序。

从以下链接:

gen date_obs = clock(datetime_obs, "MD20Yhm") //Obvously you have 4 digit years, so would change this to "MDYhm"
format date_obs %tc

http://www.stata.com/statalist/archive/2013-08/msg01434.html