首页 > 解决方案 > SAS 日期时间 22.3 到 yymmddn8

问题描述

我正在使用 SAS 来引入位于 Microsoft SQL Server 中的表并将其转储到 Hadoop 中。我面临的问题是数据变量:INSURANCE_DATE.Week_Start_Date 是 Datetime 22.3,但需要转换为 yymmddn8。我带来了 3 年的数据,入口代码片段:

%let three_year_start=%sysfunc(putn(%sysfunc (intnx(year,%sysfunc(today()), -3)), yymmddn8.)); /* */ %let three_year_end=%sysfunc(putn(%sysfunc(today()), yymmddn8.)); /今天是/

工作正常,但我不确定如何正确格式化 INSURANCE_DATE.Week_Start_Date 以便我的 where 子句起作用。

    %let three_year_start=%sysfunc(putn(%sysfunc (                 
    intnx(year,%sysfunc(today()), -3)), yymmddn8.)); /* */
    %let three_year_end=%sysfunc(putn(%sysfunc(today()), yymmddn8.)); /*is 
    today*/
    proc SQL;

      create table BA_INS as

    SELECT  
    format (INSURANCE_DATE.Week_Start_Date) yymmdd10.) as Week_Start_Date

    FROM
      dbo.DIM_INSURANCE_DATE
    WHERE
    (dbo.DIM_INSURANCE_DATE.Week_Start_Date  
    between &three_year_start. and  &three_year_end.);
    quit;

我需要一个解决方案来说明如何将该 datatime 22.3 格式转换为 yymmdd10。在 proc sql 查询中

标签: sqlsas

解决方案


如果从 SQL Server 提取的源值在 SAS 中呈现为SAS 日期时间值,并且您希望从 SAS 推送到 Hadoop 的目标值与SAS 日期值一样,则可以使用datepartSAS 中的函数。

proc sql;
  create table HADOOP.TARGET_TABLE as
  select
  …
  , datepart(Week_Start_Date) as Week_Start_Date format=date9.
  …
  from
    SQLSRV.SOURCE_TABLE
  … 
  ;

我认为实际的日期格式并不重要,只是它是 SAS 日期格式之一。SAS/Connect 引擎将检查要定位的 SAS 列,查看日期格式并自动进行任何必要的调整,以将 SAS 日期值作为日期值插入目标系统。


推荐阅读