将文本数据转换为日期

时间:2018-06-20 09:53:42

标签: sas date-formatting proc-sql

我正在从xlsx文件中读取数据,并且有一列包含文本值(“已取消”,“已推迟”,“ 2018年1月1日”)。我想将此列转换为日期类型。

我宁愿避免使用SAS,并尽可能使用PROC SQL完成此操作

我尝试使用PROC SQL,但是找不到在SAS中可用的描述SQL中有效日期函数的地方

    CREATE TABLE fixed_date AS
        SELECT
            start_date,datepart(end_date) as formatted_date
        FROM
            input_file
        WHERE end_date_validity = 1;
QUIT;

我希望有一个可以对日期进行算术运算的列的数据集。我目前收到错误消息:

ERROR: Wrong number of arguments for function datepart

1 个答案:

答案 0 :(得分:3)

具有“混合”类型数据的Excel列在导入SAS时将变为字符类型。您将需要创建一个新列,其中带有'date'字符串的行将包含SAS日期值,而不包含日期字符串的行将缺少值-可以使用INPUT函数将日期字符串转换为日期值。

例如

proc sql;
  create table have (delivery_date char(20));
  insert into have 
    values ('Cancelled') 
    values ('Postponed')
    values ('1-01-2018')
  ;

  create table want as
  select 
    delivery_date as delivery_date_string,                               /* keep column of original data  */
    input (delivery_date, ? mmddyy10.) as delivery_date format=yymmdd10. /* create new column as date value */
  from 
    have
  ;

由于您知道INPUT会遇到一些非日期字符串,因此我在信息(?)之前添加了问号(mmddyy10.)修饰符。该修饰符将阻止日志注释,例如

NOTE: Invalid date value
NOTE: Invalid argument to function INPUT. Missing values may be generated.

摘自INPUT的文档

  

?或??

     

指定可选问号(?)和双问号(??)   抑制打印错误消息和输入行的修饰符   当读取无效的数据值时。 ?修饰符抑制   无效的数据消息。 ??修饰符抑制无效数据   消息并阻止将自动变量_ ERROR _设置为   读取无效数据时为1。

还,??只能在DATA步骤中使用。