我有一个带变量的数据集,开始日期,它使用字符格式获取了许多不同的值。
我已使用开始日期列中的值拆分数据集,因为我想将日期变量转换为两个具有两个不同日期值的新列:
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.);
你知道为什么吗?以及我如何将价值转化为日期9。格式和DDMMYYD10格式?
亲切的问候
玛利亚
答案 0 :(得分:1)
使用put
时,不需要使用input
语句将值转换为数字。 input
的目标是获取字符输入并将其转换为数字值,以便SAS进行数学运算。我多么记得它:
您可以尝试使用anydtdte.
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;
尝试一下该信息,看看它是否能够获得所有信息。如果没有,您可以使用某些条件逻辑来解释这些特殊情况。