【问题标题】:Date conversion in SAS (String to Date)SAS 中的日期转换(字符串到日期)
【发布时间】:2019-09-11 08:33:04
【问题描述】:

我使用以下 SAS 程序导入 Excel 电子表格。

%let datafile = 'Excel.xlsx'
%let tablename = myDB

proc import datafile  =  &datafile   
    out  =  &tablename
    dbms  =  xlsx
    replace
     ;
run;

其中一个变量 (date_variable) 的格式为 DD.MM.YYYY。因此,我正在定义这样的新格式:

data &tablename;
    set &tablename;
    format date_variable mmddyy10.;
run;

现在,我想按该变量对表格进行排序:

proc sort data = &tablename;
  by date_variable;
run;

但是,由于date_variable 被定义为字符串,我没有正确排序。如何将date_variable 重新定义为日期?

【问题讨论】:

    标签: sorting date sas


    【解决方案1】:

    使用input 函数将包含日期表示的字符串值转换为可以应用日期样式格式的日期值,这将影响日期值在输出和查看器中的呈现方式。

    input 函数需要一个 informat 作为参数。检查format documentation,其中包含以下条目:

    DDMMYYw。提供信息
    以 ddmmyy 或 dd-mm-yy 格式读取日期值,其中用连字符 (-)、句点 (.) 或斜线 (/) 等特殊字符分隔日、月和年;年份可以是 2 位或 4 位数字。

    例子:

    * string values contain date representations;
    data have;
      input date_from_excel $10.;
      cards;
    31.01.2019
    01.02.2019
    15.01.2019
    run;
    
    data want;
      set have;
      date = input(date_from_excel, ddmmyy10.);  * convert to SAS date values;
      format date ddmmyyd10.;                    * format to apply when rendering those values;
    run;
    
    * sort by SAS date values;
    proc sort data=want;
      by date;
    run;
    

    【讨论】:

      【解决方案2】:

      format date_variable mmddyy10.; 不会将字符串转换为日期。它只是设置显示该字段等的格式。

      基本上我认为你所说的是 date_variable 是一个看起来像“31.01.2019”的字符串。如果是这种情况,您必须先将其转换为日期值:

      date_variable_converted = input(date_variable, DDMMYY10.);
      

      您现在应该能够使用 date_variable_converted 进行排序,它是一个 SAS 日期值。

      【讨论】:

      • 请注意,在使用 DDMMYY 信息读取字符串之前,无需更改字符串中的分隔符。它应该处理最常用的分隔符。
      • @Tom 更新了答案。不知道“点”也会被此信息识别。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-13
      • 1970-01-01
      • 1970-01-01
      • 2011-11-28
      • 1970-01-01
      • 2021-02-17
      相关资源
      最近更新 更多