我在 SAS 表中有一个字符变量,其中填充了非常规类型的日期时间。事实上,它具有以下格式:YYYY-MM-DDT00:00:00.000+00:00
。以下是一个示例:2020-01-01T00:00:00
。
我想将此字符列转换为日期列。我一直在文档中搜索相关格式,但没有找到正确的格式。
我找到了 $E8601DZ.
( $E8601DZ. format ),例如:2020-01-01T00:00:00+00.00
(注意 .000
秒后丢失)和 $E8601DTw.d
( $E8601DTw.d format ),例如导致: 2020-01-01T00:00:00.000
(请注意缺少 +00:00
)。
因此,是否可以“混合”这两种格式,从而产生自定义格式,从而创建具有所需格式的日期变量?
SAS 代码
:
data example;
date="2020-01-01T00:00:00.000+00:00";
run;
最佳答案
只需使用正确的信息读取数据并使用正确的格式写入数据。如果偏移始终为零,请使用 E8601DZ 格式/信息。要包含三位小数,只需确保指定您想要的位置即可。生成的字符串的总宽度为 29 个字符,其中小数点右侧 3 个字符,因此使用 e8601dz29.3
格式规范。您不想在 INFORMAT 中包含小数点宽度,因为信息中小数位的含义与格式中的小数位含义不同,因此使用 e8601dz29.
作为信息规范。
data example;
string="2020-01-01T00:00:00.000+00:00";
datetime=input(string,e8601dz29.);
format datetime datetime19.;
string2=put(datetime,e8601dz29.3);
put (_all_) (=/);
run;
结果:
string=2020-01-01T00:00:00.000+00:00
datetime=01JAN2020:00:00:00
string2=2020-01-01T00:00:00.000+00:00
关于date - 使用 ISO 8601 表示法创建自定义 SAS 日期时间格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65792995/