SAS日期格式

时间:2017-04-07 13:23:35

标签: date input formatting sas put

我有一个带变量的数据集,开始日期,它使用字符格式获取了许多不同的值。

我已使用开始日期列中的值拆分数据集,因为我想将日期变量转换为两个具有两个不同日期值的新列:

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格式?

亲切的问候

玛利亚

1 个答案:

答案 0 :(得分:1)

使用put时,不需要使用input语句将值转换为数字。 input的目标是获取字符输入并将其转换为数字值,以便SAS进行数学运算。我多么记得它:

  • 中:将 将值 中的转换为数值
  • 设置:输出数字值作为字符值

您可以尝试使用anydtdte. informat的更简单的解决方案。它能够阅读以下任何信息:

  • 日期
  • 日期时间
  • DDMMYY
  • JULIAN
  • MDYAMPM
  • MMDDYY
  • MMxYY
  • MONYY
  • TIME
  • YMDDTTM
  • YYMMDD
  • YYQ
  • YYxMM
  • 月,日,年

例如:

%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;

尝试一下该信息,看看它是否能够获得所有信息。如果没有,您可以使用某些条件逻辑来解释这些特殊情况。