我创建了以下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语句中的提及日期是假日,我想如何查询上一个日期(非假日)
答案 0 :(得分:1)
在运行查询之前,您必须对您使用的日期进行查找或数据检查。您有两种选择:
我建议使用日期维度表选项。
答案 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'
现在,您可以在传递中使用此宏变量。