簡體   English   中英

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

[英]Use SAS Macro Variable within Proc SQL Teradata passthrough

我有一個SQL語句,我希望自動使用SAS EG(9.4)。 以下語句已在Teradata SQL Assistant中進行了測試並正常運行。

select * from TD.DATA where date='2015-06-01'

現在我希望通過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;

上面的代碼已經過測試,並產生與前一個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;

我嘗試過不同的報價組合和不同的日期格式....我在這里缺少什么? 謝謝。

您可以使用%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;

試試這個:

%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=%str(%'&input_date%')
);
disconnect from tera;
quit;

與日期201501這樣的格式一樣,使工作宏變量

%let input_date = 201506;
%let input_date2=input(put(intnx('month',%sysfunc(inputn(&input_date,yymmn6.)),0,'b'),10.),yymmddd10.)
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_DATE2')
  );
  disconnect from tera;
quit;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM