没有一种本机格式可以准确地生成该字符串。但是使用现有格式逐步构建它并不难。或者您可以使用 PROC FORMAT 中的 PICTURE 语句来构建您自己的格式。
如果您并不真正关心 datetime 值的时间部分,那么这是一种简单易懂的方法,可以将带有秒数的数值变量 DT 转换为该样式的新字符变量。使用 DATEPART() 从日期时间值中获取日期(天数),然后使用 YYMMDD 格式为日期生成 10 个字符的字符串,然后只需附加格式化零的常量字符串。
length dt_string $21.;
dt_string = put(datepart(dt),yymmdd10.)||' 00:00:00.0';
如果您需要一天中的时间部分,那么您也可以使用 TOD 格式。
dt_string = put(datepart(dt),yymmdd10.)||put(dt,tod11.1);
或者您可以使用 E8601DT21.1 格式,然后将日期和时间之间的字母 T 改为空格。
dt_string = translate(put(dt,E8601DT21.1),' ','T');
如果您想弄清楚日期时间值存在哪些格式以及格式化后的结果是什么样的,您可以运行一个小程序从元数据中提取格式并将它们应用于特定的日期时间值。
data datetime_formats;
length format $50 string $80 ;
set sashelp.vformat;
where fmttype='F';
where also fmtinfo(fmtname,'cat')='datetime';
keep format string fmtname maxw minw maxd ;
format=cats(fmtname,maxw,'.','-L');
string=putn('01Jan2020:01:02:03'dt,format);
run;