Date conversion in SAS (String to Date)

混江龙づ霸主 提交于 2021-01-29 13:45:31

问题


I import an Excel-spreadsheet using the following SAS-procedure.

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

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

One of the variables (date_variable) has the format DD.MM.YYYY. Therefore, I was defining a new format like this:

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

Now, I would like to sort the table by that variable:

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

However, as the date_variable is defined as a string, I dont get the sorting right. How can I re-define the date_variable as a date?


回答1:


Use the input function to convert the string-value containing a date representation to a date-value that can have a date-style format applied to it that will affect how the date-value is rendered in output and viewers.

The input function requires an informat as an argument. Check the format documentation, which includes an entry for:

DDMMYYw. Informat
Reads date values in the form ddmmyy or dd-mm-yy, where a special character, such as a hyphen (-), period (.), or slash (/), separates the day, month, and year; the year can be either 2 or 4 digits.

Example:

* 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.; does not convert a string to a date. It just sets a format for displaying that field etc.

Essentially I think what you are saying is date_variable is a string that looks like "31.01.2019". If that is the case, you will have to first convert it into a date value:

date_variable_converted = input(date_variable, DDMMYY10.);

You should be now able to sort using date_variable_converted which is a SAS date value.



来源:https://stackoverflow.com/questions/57885193/date-conversion-in-sas-string-to-date

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!