SAS:将数值转换为字符值
我正在尝试转换datatime20。从数值到字符值。 目前,我有这样的数值:01Jan200:00:00:00,我需要将其转换为字符值,并接收输出,如:2020-01-01 00:00:00.0 上述文件应采用何种格式和信息?SAS:将数值转换为字符值,sas,Sas,我正在尝试转换datatime20。从数值到字符值。 目前,我有这样的数值:01Jan200:00:00:00,我需要将其转换为字符值,并接收输出,如:2020-01-01 00:00:00.0 上述文件应采用何种格式和信息? 我曾尝试使用PUT函数将数字转换为字符,并尝试了许多选项,每次都接收其他格式。在放入之前还应该使用DHMS函数吗?没有一种本机格式可以精确地生成该字符串。但使用现有格式分步骤构建并不困难。或者您可以使用PROC格式的PICTURE语句来构建自己的格式 如果您并不真正关心d
我曾尝试使用PUT函数将数字转换为字符,并尝试了许多选项,每次都接收其他格式。在放入之前还应该使用DHMS函数吗?没有一种本机格式可以精确地生成该字符串。但使用现有格式分步骤构建并不困难。或者您可以使用PROC格式的PICTURE语句来构建自己的格式 如果您并不真正关心datetime值的时间部分,那么这是一种简单明了的方法,可以将具有秒数的数字变量DT转换为该样式的新字符变量。使用DATEPART()从datetime值获取日期(天数),然后使用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');
如果您想了解datetime值的格式以及格式化结果的外观,可以运行一个小程序从元数据中提取格式并将其应用于特定的datetime值
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;
可以定义自定义格式以返回用户定义函数的结果
请向我们展示您的尝试。
proc format;
value <format-name> (default=<width>)
other = [<function-name>()]
;
run;
options cmplib=(sasuser.functions);
proc fcmp outlib=sasuser.functions.temporal;
function E8601DTS (datetime) $21;
return (
translate (putn(datetime,'E8601DT21.1'),' ','T')
);
endsub;
run;
proc format;
value E8601DTS (default=21)
other = [E8601DTS()]
;
run;
data have;
do dt = '01jan2020:0:0'dt to '10jan2020:0:0'dt by '60:00't;
output;
end;
format dt datetime16.;
run;
ods html file='function-based-format.html';
proc print data=have(obs=4); title 'stock E8601DT';
proc print data=have(obs=4); title 'custom E8601DTS';
format dt E8601DTS.;
run;
ods html close;