SAS连接到Teradata - 使用2个帐户(交换机)

时间:2013-11-13 17:16:27

标签: sas teradata

有人可以帮忙吗?我在几年内没有使用SAS,需要一些帮助才能连接到Teradata。

如果时间是在晚上7点到6点59分之间,或者如果时间是在早上7点到下午6点59分之间,我想使用ACCT1连接到Teradata。

%let
    acct1="mismktdev"
        acct2="mismktprod"


%include
%macro t_cnnct;  
    options nomprint;
    connect to teradata (tdpid="&tpidxyz" user="&misuid"
    password="&mispwd" account="&acct1"  mode=teradata);
    options mprint;

proc sql;
  connect to teradata (user="&terauser" password="&terapwd"  mode=teradata);
  execute (SET QUERY_BAND = 'Application=PrimeTime;Process=Daily;script=pt_add_history_v30.sas;' for session ) by teradata;
  %mend t_cnnct;

proc sql;
    Sel * from tblname;

2 个答案:

答案 0 :(得分:0)

您可以使用%let timenow=%sysfunc(time(), time.);来获取程序运行的时间,然后在宏中执行以下操作:

%macro test();
%let timenow=%sysfunc(time(), time.);
%put &timenow;
%if (&timenow > '19:00'T and &timenow < '06:59'T) %then %do;
    /* Your Code for 7pm - 6:59am Here*/
%end; 

%else %do;
    /*Code for 7am - 6:59pm here*/
%end;
%mend;

%test();

答案 1 :(得分:0)

您使用SAS宏变量的想法是正确的。这是一个宏,用于定义所需的所有全局SAS宏变量(包括更改“帐户”字符串):

%macro t_cnnct;
%global tdserver terauser terapwd teraacct teradb;

%let tdserver=myTDPID;
%let terauser=myuserID;
%let terapwd=mYTDpassword;
%let teradb=myTDdatabase;

%let now=%sysfunc(time());
%if    &now >= %sysfunc(inputn(07:00,time5.)) 
   and &now <= %sysfunc(inputn(19:00,time5.))
  %then %let teraacct=mismktdev;
  %else %let teraacct=mismktprod;
%mend t_cnnct;

请注意,SAS宏变量值没有双引号!在代码中引用双引号时使用双引号。

接下来,只需在PROC SQL代码之前运行宏来设置变量并在连接字符串中使用这些变量:

%t_cnnct;

proc sql;
  connect to teradata (user="&terauser" password="&terapwd" account="&teraacct" 
                       server="&tdserver" mode=teradata);
  execute (
     SET QUERY_BAND = 'Application=PrimeTime;Process=Daily;script=pt_add_history_v30.sas;' for session
     ) by teradata;

  create table mySASds as
  select *
  from connection to teradata (
     select *
     from &teradb..tablename
     );
quit;

请注意,您使用的tdpid=选项是server=选项的别名(我更喜欢)。此外,您设置的查询带将对整个PROC SQL运行保持有效。

以下是使用相同宏变量的SAS libref的示例:

libname myTD teradata user="&terauser" password="&terapwd" account="&teraacct" 
                      server="&tdserver" database="&teradb" mode=teradata);