SAS中的日期转换(字符串到日期)

时间:2019-09-11 08:33:04

标签: sorting date sas

我使用以下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作为日期?

2 个答案:

答案 0 :(得分:2)

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

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

date_variable_converted = input(date_variable, DDMMYY10.);

您现在应该可以使用SAS日期值date_variable_converted进行排序。

答案 1 :(得分:2)

使用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;