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

根据txt文件中的给定日期定义日期格式

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

    我已在中获得日期/日期时间。txt文件

    例如:

    20180422
    02122018
    2018/04/22
    22/04/2018
    04-02-2018
    2018-04-20 13:05:56
    

    现在,我首先导入上面的内容。txt文件,因此在sas数据集中它将是数字格式。对于每个日期,我需要自动定义date\u格式。

    格式示例:

    yyyymmdd
    mmddyyyy
    yyyy/mm/dd
    dd/mm/yyyy
    dd-mm-yyyy
    yyyy-mm-dd hh:mm:ss
    

    如何根据给定的日期定义格式?

    1 回复  |  直到 6 年前
        1
  •  1
  •   momo1644    6 年前

    在我的第一步中,我将日期保存为字符串,然后使用 input(a,anydtdte20.) 在以下步骤中,将其转换为SAS日期和 input(a,ymddttm24.) 用于日期时间;这样,所有带有“/”和“-”的日期都将被读取为SAS日期。

    请注意,我使用的是DMY的语言环境,对于datetime,我只提取日期部分。

    options DATESTYLE=DMY;
    data have;
    length a $ 23 ;
    input a $;
    datalines;
    20180422
    12022018
    2018/04/22
    22/04/2018
    04-02-2018
    2018-04-20T13:05:56
    ;
    run;
    
    data want;
    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
    a=2018/04/22 date_a=22APR2018 Year_a=2018 month_a=4 day_a=22
    a=22/04/2018 date_a=22APR2018 Year_a=2018 month_a=4 day_a=22
    a=04-02-2018 date_a=04FEB2018 Year_a=2018 month_a=2 day_a=4
    a=2018-04-20T13:05:56 date_a=20APR2018 Year_a=2018 month_a=4 day_a=20
    

    您可以找到更多动态日期(&D);此中的日期时间信息 SAS Post

    为了更进一步,您可以为所需的每种格式创建额外的列/变量,此处添加了datetime处理:

    proc sql;
    create table dates as 
    select
    a as Date_String ,
    date_a as SAS_Date9 format=date9. ,
    date_a as SAS_YYMMDDN8 format=YYMMDDN8. ,
    date_a as SAS_DDMMYYN8 format=DDMMYYN8. ,
    date_a as SAS_YYMMDDS10 format=YYMMDDS10. ,
    date_a as SAS_DDMMYYS10 format=DDMMYYS10. ,
    case when LENGTH(a) > 10 then input(a,ymddttm24.) else . end as SAS_Datetime21 format=datetime21. ,
    case when LENGTH(a) > 10 then timepart(input(a,ymddttm24.)) else . end as SAS_Time format=time8. 
    from work.want;
    quit;
    

    输出:

    SAS_Date9=22APR2018 SAS_YYMMDDN8=20180422 SAS_DDMMYYN8=22042018 SAS_YYMMDDS10=2018/04/22
    SAS_DDMMYYS10=22/04/2018 SAS_Datetime21=. SAS_Time=.
    SAS_Date9=12FEB2018 SAS_YYMMDDN8=20180212 SAS_DDMMYYN8=12022018 SAS_YYMMDDS10=2018/02/12
    SAS_DDMMYYS10=12/02/2018 SAS_Datetime21=. SAS_Time=.
    SAS_Date9=22APR2018 SAS_YYMMDDN8=20180422 SAS_DDMMYYN8=22042018 SAS_YYMMDDS10=2018/04/22
    SAS_DDMMYYS10=22/04/2018 SAS_Datetime21=. SAS_Time=.
    SAS_Date9=22APR2018 SAS_YYMMDDN8=20180422 SAS_DDMMYYN8=22042018 SAS_YYMMDDS10=2018/04/22
    SAS_DDMMYYS10=22/04/2018 SAS_Datetime21=. SAS_Time=.
    SAS_Date9=04FEB2018 SAS_YYMMDDN8=20180204 SAS_DDMMYYN8=04022018 SAS_YYMMDDS10=2018/02/04
    SAS_DDMMYYS10=04/02/2018 SAS_Datetime21=. SAS_Time=.
    SAS_Date9=20APR2018 SAS_YYMMDDN8=20180420 SAS_DDMMYYN8=20042018 SAS_YYMMDDS10=2018/04/20
    SAS_DDMMYYS10=20/04/2018 SAS_Datetime21=20APR2018:13:05:56 SAS_Time=13:05:56
    

    Dates