2013-11-13 2 views
0

Может кто-нибудь поможет? Я не использовал SAS через несколько лет и нуждаюсь в некоторой помощи при подключении к Teradata.SAS подключается к Teradata - с использованием 2 учетных записей (коммутатор)

Я хочу подключиться к Teradata, используя ACCT1, если время дня между 7 pm-6:59am или с Acct2, если время дня составляет от 7 утра до 6:59 вечера.

%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; 

ответ

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(); 
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); 
Смежные вопросы