如何将19JUL2023:00:00:00转换为2023-07-19 00:00:00格式的SAS日期时间
SAS日期时间格式转换:19JUL2023:00:00:00 → 2023-07-19 00:00:00
要实现这种格式转换,核心分两步:将源字符型日期时间转为SAS原生datetime数值,再将SAS datetime值格式化为目标字符串,以下是两种实用方案:
方法1:拆分拼接日期时间分量
通过拆分SAS datetime的日期、时间部分,分别格式化后拼接成目标样式:
data _null_; /* 替换为你的源日期时间变量或字符串 */ source_dttm_str = '19JUL2023:00:00:00'; /* 把字符串转成SAS datetime数值型变量 */ sas_dttm = input(source_dttm_str, datetime20.); /* 分别格式化日期和时间,拼接成目标格式 */ target_dttm_str = catx(' ', put(datepart(sas_dttm), yymmdd10.), /* 日期转2023-07-19 */ put(timepart(sas_dttm), time8.) /* 时间转00:00:00 */ ); /* 存入宏变量(匹配你的原有需求) */ call symput('from_batch_dttm_orcl', target_dttm_str); run;
方法2:创建自定义格式(更简洁)
通过proc format定义专属datetime格式,一次性输出目标样式:
/* 定义自定义datetime格式 */ proc format; picture dttm_orcl low-high = '%Y-%0m-%0d %0H:%0M:%0S' /* 指定输出模板 */ (datatype=datetime); /* 声明格式作用于datetime类型 */ run; data _null_; source_dttm_str = '19JUL2023:00:00:00'; sas_dttm = input(source_dttm_str, datetime20.); /* 直接用自定义格式输出 */ target_dttm_str = put(sas_dttm, dttm_orcl.); call symput('from_batch_dttm_orcl', target_dttm_str); run;
针对你现有代码的补充说明
如果1958774400是UNIX时间戳(自1970-01-01 00:00:00起的秒数),需先转成SAS datetime值:
sas_dttm = 1958774400 + '01JAN1970:00:00:00'dt;
之后再用上述任意方法格式化即可。
内容的提问来源于stack exchange,提问作者Arun P.A
相关产品推荐
相关产品推荐

