我有格式为DATETIME23.
的列,如下所示:
14.02.2017 13:00:25
我希望将其转换为字符串,所以稍后,我可以对它进行现代化处理,例如,最终版本看起来像:
2017-02-14 13:00:25.000
问题发生,当我尝试将日期转换为char格式时:结果我有一个像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会破坏月份元素中的零
答案 0 :(得分: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&#39;如果只是空格,只需在translate
附近添加put()
函数。
答案 1 :(得分:0)
对于dtms
解决方案,您可以使用put
和Z2.
格式在连接时保持前导零:
dtms = cat(day(d),'-', put(month(d),z2.),'-',year(d),' 00:00:00.000');
您应该只能使用put(date, datetime23.)
来代替问题,而不是$23
,它将秒数转换为长度为23的字符串。但是,正如评论中提到的那样datetime23.
1}}不是您示例中的格式。