Date 使用ISO 8601符号创建自定义SAS日期时间格式
我在SAS表中有一个字符变量,它填充了一种不常见的日期时间类型。实际上,它的格式如下:Date 使用ISO 8601符号创建自定义SAS日期时间格式,date,datetime,sas,format,iso,Date,Datetime,Sas,Format,Iso,我在SAS表中有一个字符变量,它填充了一种不常见的日期时间类型。实际上,它的格式如下:YYYY-MM-DDT00:00:00.000+00:00。下面是一个示例:2020-01-01T00:00:00 我想将此字符列转换为日期列。我一直在文档中搜索相关格式,但没有找到正确的格式 我找到了$E8601DZ.(),其结果例如:2020-01-01T00:00:00+00.00(注意.000在秒后丢失)和$E8601DTw.d(),其结果例如:2020-01-01T00:00:00.000(注意+00
YYYY-MM-DDT00:00:00.000+00:00
。下面是一个示例:2020-01-01T00:00:00
我想将此字符列转换为日期列。我一直在文档中搜索相关格式,但没有找到正确的格式
我找到了$E8601DZ.
(),其结果例如:2020-01-01T00:00:00+00.00
(注意.000
在秒后丢失)和$E8601DTw.d
(),其结果例如:2020-01-01T00:00:00.000
(注意+00:00
丢失)
因此,是否有可能“混合”这两种格式,生成一种自定义格式,以创建具有所需格式的日期变量
SAS代码
:
data example;
date="2020-01-01T00:00:00.000+00:00";
run;
您可以声明您有一个字符变量,其中包含日期时间表示形式的值 您链接到的格式不是字符格式,因此不将以
$
开头。按文档格式
写入零子午线的日期时间值
Datetime值基本上是数字
您可能需要执行输入
,将字符值转换为实际的SAS日期时间值(数字秒从历元01jan1960T0:0:0
),然后对接收日期时间值的变量应用ISO日期时间格式
例如:
data have;
my_datetime_string = '2020-01-01T00:00:00';
run;
data want;
set have;
my_sas_datetime = input (my_datetime_string, E8601DT.);
my_sas_datepart = datepart(my_sas_datetime);
format my_sas_datetime datetime19.;
format my_sas_datepart date9.;
run;
proc print data=want;
run;
只需使用正确的信息读取数据,并使用正确的格式写入数据即可。如果偏移量始终为零,则使用E8601DZ格式/信息。要包含小数点后三位,请确保指定这是您想要的。生成的字符串的总宽度为29个字符,其中3个位于小数点的右侧,因此请使用
e8601dz29.3
格式规范。您不希望在信息中包含小数点宽度,因为信息中小数点的含义不同于格式,因此请使用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