在Proc SQL Teradata passthrough中使用SAS宏变量

pyl*_*yll 4 sql sas

我有一个SQL语句,我希望自动使用SAS EG(9.4).以下语句已在Teradata SQL Assistant中进行了测试并正常运行.

select * from TD.DATA where date='2015-06-01'
Run Code Online (Sandbox Code Playgroud)

现在我希望通过proc SQL传递来推送它,并将日期提供给SQL程序,就像这样....

proc sql;
connect to teradata as tera(user=&tera_user password="&tera_pwd" tdpid=terap);
create table MYDATA as 
select * from connection to tera
(
select * from TD.DATA where date='2015-06-01'
);
disconnect from tera;
quit;
Run Code Online (Sandbox Code Playgroud)

上面的代码已经过测试,并产生与前一个SQL语句完全相同的输出.但是,我真正想要的是做这样的事情:

%let input_date='2015-06-01';
proc sql;
connect to teradata as tera(user=&tera_user password="&tera_pwd" tdpid=terap);
create table MYDATA as 
select * from connection to tera
(
select * from TD.DATA where date=&input_date.
);
disconnect from tera;
quit;
Run Code Online (Sandbox Code Playgroud)

我尝试过不同的报价组合和不同的日期格式....我在这里缺少什么?谢谢.

Chr*_*s J 6

您可以使用%BQUOTE()宏函数来解析单引号内的宏变量.

%let input_date = 2015-06-01;
proc sql;
  connect to teradata as tera(user=&tera_user password="&tera_pwd" tdpid=terap);
  create table MYDATA as 
  select * from connection to tera
  (
   select * from TD.DATA where date = %BQUOTE('&INPUT_DATE')
  );
  disconnect from tera;
quit;