代码之家  ›  专栏  ›  技术社区  ›  user1645514

如何定义给定日期的日期格式

  •  2
  • user1645514  · 技术社区  · 6 年前

    我想知道,我们如何从给定的日期定义日期格式

    例如,我有日期20180423,然后在sas中我想将格式定义为“yyyymmdd”

    同样,我在数据中给出的日期为12022018,然后我想定义为“ddmmyyyy”

    请注意,日期是以正确的日期提供给我的,但我现在想定义格式。 未来给出的日期可能会有所不同 所以我需要通过SAS处理所有的日期格式

    我认为给出的日期是20180422 使用substr函数

    data test;
    a=20180422;
    a=substr(a,1,4);
    b=substr(a,5,1);
    c=substr(a,7,1);
    run;
    

    但不确定。

    如果有人能提供解决方案,那么它对我的项目工作真的很有帮助。

    提前感谢您的帮助。

    3 回复  |  直到 6 年前
        1
  •  3
  •   Longfish    6 年前

    听起来像是要将各种值转换为日期。SAS将日期存储为数字,即自1960年1月1日以来的天数。然后,通常会将此数字格式化为日期,以首选的格式显示。

    导入已采用格式的日期时,需要使用 input 函数以及一个信息,用于将格式化值转换为SAS日期。如果读取的日期值都采用相同的格式,则可以使用特定的信息。在使用不同格式的情况下,可以使用 anydtdte. 将大多数标准日期格式转换为SAS日期的informat。

    下面的示例将3种不同的日期格式转换为SAS日期,然后在 date9. 总体安排我已将未格式化和格式化的新值打印到日志中,以便您可以看到它们存储为数字。

    data _null_;
    input date_in $20.;
    date_out = input(date_in, anydtdte20.);
    put date_in date_out date_out :date9.;
    datalines;
    20180422
    12022018
    27apr2018
    ;
    run;
    
        2
  •  2
  •   momo1644    6 年前

    使用 input(a,anydtdte20.) ;这将把任何日期转换为SAS日期,然后使用函数 Year() ,则, Month() ,则, Day() 提取所需数据。 您将找到此SAS Post 关于日期和地区非常有用。

    解决方案:

    我创建了一个有两行的表;每行具有不同的日期格式YYYYMMDD&DDMMYYYY向您展示代码如何处理不同的日期格式,将其保存到SAS日期,并将其分解为年、月和;日期:

    options DATESTYLE=DMY;
    data have;
    input a;
    datalines;
    20180422
    12022018
    ;
    run;
    
    data test;
    set have;
    format date_a date9.;
    date_a=input(a,anydtdte20.);
    Year_a=year(date_a);
    month_a=month(date_a);
    day_a=day(date_a);
    run;
    

    输出:

    a=20180422 date_a=22APR2018 Year_a=2018 month_a=4 day_a=22 
    a=12022018 date_a=12FEB2018 Year_a=2018 month_a=2 day_a=12
    

    Output

        3
  •  0
  •   JineshEP    6 年前

    可以在数据步骤中使用if条件。使用If条件,检查条件是否为true(检查日期值是否满足所需条件),然后使用put函数格式化日期。Put函数可以将源作为第一个参数,将格式作为第二个参数,并返回格式化值。同一列的不同值可以以这种方式指定不同的格式。

    像这样的,

      if a = 'date1CheckCondtion' then newA = put(a , dateformat1.);
      if a = 'date2' then newA = put(a , dateformat2.);
    

    然后,您可以选择以下通用格式获取所有值:

      dateA=input(newA,mmddyy6.);