转换日期格式字符串

问题描述:

格式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

如果你的日期时间存储为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

不错,非常感谢! –

为了您的dtms解决方案,您可以使用putZ2.格式,以保持领先的零当您连接:

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

您应该可以仅使用put(date, datetime23.)来解决问题,而不是使用$23,即将秒数转换为长度为23的字符串。但是,正如注释所述,datetime23.不是来自您的e xample。