我有一个带有变量“开始日期”的数据集,它使用字符格式获取许多不同的值。
我使用开始日期列中的值将数据集拆分,因为我希望将date变量转换为两个具有两个不同日期值的新列:
if length(Startvalue) = 6 then output a6;
else if length(Startvalue) = 8 then output a8 ;
else if length(Startvalue) = 1 then output a1;
else output a_other;
一个值是这样写的: 090209 (DDMMYY)
我想将变量格式化为两个date9。格式和DDMMYYD10。格式如下:
FORMAT Startvalue2 date9.;
format Startvalue3 DDMMYYD10.;
我让它在一个数据步骤中使用这种方法:
FORMAT Startdato2 date9.;
format startdato3 DDMMYYD10.;
Startdato2 = INPUT(PUT(Startdato,6.),DDMMYY6.);
Startdato3 = INPUT(PUT(Startdato,6.),DDMMYY6.);
另一个值是这样写的: 15-08-17 (DD-MM-YY)我也想要这个值的两种格式,如下所示:
FORMAT Startvalue2 date9.;
format Startvalue3 DDMMYYD10.;
但在这里,我不能使用我的表达式的副本,从上面:
FORMAT Startvalue2 date9.;
format Startvalue3 DDMMYYD10.;
Startvalue2 = INPUT(PUT(Startvalue,8.),DDMMYYDw.);
Startvalue3= INPUT(PUT(Startvalue,8.),DDMMYYDw.);
你知道为什么吗?以及如何将值转换为date9。格式和DDMMYYD10格式?
亲切的问候
玛丽亚
发布于 2017-04-07 13:53:48
在使用put
语句时,不需要使用input
语句将值转换为数字。input
的目标是接受一个字符输入,并将其转换为SAS进行数学运算的数字值。我是如何一直记住它的:
您可以尝试的一个更简单的解决方案是使用 informat。它能够阅读下列任何信息:
例如:
%let default_datestyle = %sysfunc(getoption(datestyle));
options datestyle=DMY;
data want;
set have;
Startdato2 = INPUT(Startdato, anydtdte.);
Startvalue2 = INPUT(Startvalue, anydtdte.);
Startdato3 = Startdato2;
Startvalue3 = Startvalue2;
<rest of code>;
format Startvalue2 date9.
Startvalue3 ddmmyyd10.
Startdato2 date9.
Startdato3 ddmmyyd10.
;
run;
options datestyle = &default_datestyle;
让informat试一试,看看它是否能够得到一切。如果没有,您可以使用一些条件逻辑来解释这些特殊情况。
https://stackoverflow.com/questions/43279312
复制相似问题