2017-02-09 180 views
0

格式DATETIME23.的這樣一列:轉換日期格式字符串

14.02.2017 13:00:25 

我想它CONVER爲一個字符串,所以後來,我將能夠向現代的,因此,舉例來說,最終版本會是什麼樣子:

2017-02-14 13:00:25.000

問題 occures,當我嘗試將日期轉換爲字符格式:結果我有一個像1802700293這樣的字符串 - 這是秒數。

我想:

format date $23.0

date = put(date, $23.0)

P.S這諾特爾嘗試:

data a; 
format d date9.; 
d = '12jan2016'd; 
dtms = cat(day(d),'-',month(d),'-',year(d),' 00:00:00.000'); 

/* если нужно обязательно двухзначные день и месяц, то такой колхоз: */ 
if day(d) < 10 then dd=cat('0',put(day(d),$1.)); 
else ddday=put(day(d),$2.); 
if month(d) < 10 then mm=cat('0',put(month(d),$1.)); 
else mm=put(month(d),$2.); 
yyyy=put(year(d),$4.); 
/*dtms2 = cat(dd,'-',mm,'-',yyyy,' 00:00:00.000');*/ 
dtms2 = cat(dd,'-',mm,'-',yyyy,' 00:00:00.000'); 
dtms = cat(day(d),'-',month(d),'-',year(d),' 00:00:00.000'); 
run; 

,異常的dtms2 CONCAT破壞了一個月元素零

+1

datetime23。格式爲'ddmmmyy:hh:mm:ss.ss',這與您的示例不同。請你澄清一下。 – Longfish

回答

1

如果你的日期時間存儲爲SAS日期時間,只要使用適當的格式:

 
data test ; 
    dt = '09feb2017:13:53:26'dt ; /* specify a datetime constant */ 
    new_dt = put(dt,E8601DT23.3) ; /* ISO datetime format */ 
run ; 

輸出

 
    dt    new_dt 

1802267606 2017-02-09T13:53:26.000 

如果你需要用空格來代替「T」,只需添加一個translate函數圍繞着put()

+0

不錯,非常感謝! –

0

爲了您的dtms解決方案,您可以使用putZ2.格式,以保持領先的零當您連接:

dtms = cat(day(d),'-', put(month(d),z2.),'-',year(d),' 00:00:00.000'); 

您應該可以僅使用put(date, datetime23.)來解決問題,而不是使用$23,即將秒數轉換爲長度爲23的字符串。但是,正如註釋所述,datetime23.不是來自您的e xample。

相關問題