数据集中缺少日期

时间:2018-04-28 06:33:02

标签: sas

我创建了以下SAS代码来提取特定日期的数据。

%let date =2016-12-31;


proc sql;
connect to teradata   as tera ( user=testuser password=testpass );
create table new as select * from connection tera (select acct,org 
from dw.act
where date= &date.);
disconnect from tera;
quit;

由于假期,有可能在数据集中缺少特定日期。

如果%let语句中的提及日期是假日,我想如何查询上一个日期(非假日)

2 个答案:

答案 0 :(得分:1)

在运行查询之前,您必须对您使用的日期进行查找或数据检查。您有两种选择:

  1. 使用日期维度表来识别/查找假期。
  2. 计算该日期的记录数,如果此日期为0,请在查询中使用日期+ 1。
  3. 我建议使用日期维度表选项。

答案 1 :(得分:1)

Teradata有Sys_Calendar.Calendar视图。您可以在查询中使用它,它包含有关工作日和其他的所有信息。

如果您想使用SAS方式使用工作日功能并使用呼叫参与,如下所示。 Teradata需要在日期周围使用单引号,因此在创建宏变量

时最好使用单引号
  data _null_;
  /* this is for intial date*/
   date_int = input('2016-12-31', yymmdd10.);
 /* create a new date variable depending on weekday*/
  if weekday(date_int) = 7 then date =date_int-2; /*sunday -2 days to get 
  friday*/
  else if weekday(date_int) = 6 then date =date_int-1;/*saturday -1 day to get 
   friday*/
  else date =date_int;
  format date  date_int yymmdd10.;
  call symputx('date', ''''||put(date,yymmdd10.)||'''');
  run;
  %put modfied date is &date;
  modified date is '2016-12-29'

现在,您可以在传递中使用此宏变量。