【问题标题】:SAS connect to Teradata - Using 2 accounts (switch)SAS 连接到 Teradata - 使用 2 个帐户(切换)
【发布时间】:2013-11-26 10:22:01
【问题描述】:

有人可以帮忙吗?我已经有几年没有使用 SAS 了,在连接 Teradata 时需要一些帮助。

如果一天中的时间在晚上 7 点到早上 6:59 之间,我想使用 ACCT1 连接到 Teradata;如果一天中的时间在早上 7 点到晚上 6:59 之间,我想使用 Acct2 连接到 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;

【问题讨论】:

    标签: sas teradata


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您使用 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);
      

      【讨论】:

        猜你喜欢
        • 2018-05-22
        • 2015-04-01
        • 2012-01-04
        • 2020-01-21
        • 2017-06-07
        • 2013-11-15
        • 2021-11-30
        • 2017-07-24
        • 2018-01-09
        相关资源
        最近更新 更多