转换日期格式字符串
问题描述:
我格式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破坏了一个月元素零
答
如果你的日期时间存储为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
解决方案,您可以使用put
和Z2.
格式,以保持领先的零当您连接:
dtms = cat(day(d),'-', put(month(d),z2.),'-',year(d),' 00:00:00.000');
您应该可以仅使用put(date, datetime23.)
来解决问题,而不是使用$23
,即将秒数转换为长度为23的字符串。但是,正如注释所述,datetime23.
不是来自您的e xample。
datetime23。格式为'ddmmmyy:hh:mm:ss.ss',这与您的示例不同。请你澄清一下。 – Longfish