2015-11-05 105 views
-3

儘管不是使用'help datetime'(已經這樣做)或者通過閱讀N.Cox的'Speaking Stata:On numbers and strings'來解答這個問題。 解決方案:日期時間數據的轉換

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 | 

我想刪除時間和更改格式,這將允許我按實際日期排序。

+4

我建議您閱讀至少'help datetime',並回復如果您遇到代碼問題。 –

+0

原標題「徹底查看本網站,Stata網站,大學網站,發現了與我的查詢無關或無法使用的許多內容」,對任何其他人都沒有任何意義,可以說明您的確切問題。請選擇信息標題。 –

+0

您提到的**解決方案**在您提到的幫助中記錄在案。你所引用的2002年的文章並不是要系統地討論日期,無論如何也不可能討論處理日期時間的問題,這些日期時間是2007年引入Stata的。 –

回答

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

+0

不幸的是,指定一個「double」來保存日期時間是很重要的恰恰。見'幫助日期'。 –

1

@Stan指示的主要思想,你必須從字符串轉換爲數字日期變量。 @羅伯託費雷爾強調,這是所有記錄在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 | 
    +------------------------------+