2015-01-03 4 views
0

Я использую SAS Enterprise Guide 6.1 и использую возможность «Отправить код SAS при подключении к серверу» в разделе «Инструменты», «Программы SAS» для отправки всех моих личных учетных данных, имен libnames. Да, я знаю, что есть, вероятно, более простой способ сделать это с помощью SAS Management Console, но сейчас это не вариант.SAS Условные назначения лимен и журнал ошибок

У меня есть несколько библиотек Teradata, которые мне нужно назначить в каждом проекте, но проблема в том, что иногда я (или чаще кто-то другой в моей команде) меняет свой пароль и забывает изменить его в стартовом коде. Это приводит к нескольким неправильным попыткам и немедленно блокирует меня. Я хотел бы сделать несколько вещей:

  1. Создание условного назначения Имя_библиотеки, который будет выполнять все libnames, если учетные данные являются правильными.

  2. Если учетные данные неверны, имена libnames не выполняются (так что я не блокирую себя).

  3. Поскольку код SAS в разделе «Отправить код SAS при подключении к серверу», похоже, не создает журнал, я хочу отправить мне электронное письмо с подключенным журналом SAS (только если сбой учетных данных).

  4. Убейте соединение с сервером (если ошибка учетных данных), чтобы избежать дальнейших попыток назначить библиотеки.

Вот моя попытка, у меня возникли проблемы с подключением журнала и настройкой оператора электронной почты.

*Define personal credentials; 
%let [email protected]; 
filename temp email "&myemail"; 

*Define Teradata credentials; 
%let tera_user=Gollum;       /*Teradata Username*/ 
%let tera_pwd=#filthy_hobbitses;       /*Teradata Password*/ 

*Conditionally assign libraries; 
%macro libsetup(); 
libname library1 teradata user=&tera_user password="&tera_pwd" tdpid=terap schema=library1 fastload=yes bulkload=yes fastexport=yes; 
    %if &syslibrc=0 %then 
     %do; 
      libname library2 teradata user=&tera_user password="&tera_pwd" tdpid=terap schema=library2 fastload=yes bulkload=yes fastexport=yes; 
      libname library3 teradata user=&tera_user password="&tera_pwd" tdpid=terap schema=library3 fastload=yes bulkload=yes fastexport=yes; 
      *more library statements here; 
     %end; 
    %else 
     %do; 
      data _null_; 
      file temp 
      subject="TERADATA CREDENTIALS ERROR" 
      attach=("put SAS LOG filename here"); 
      put 'Teradata Login Failed. SAS LOG Attached.'; 
      %abort abend; 
     %end; 
%mend libsetup; 
%libsetup; 

Thanks.

+0

Иногда его проще использовать функцию libname вместо операторов libname. – Reeza

+0

Если вы собираетесь вставлять пароли в код, используйте 'PROC PWENCODE' для его шифрования, а затем вставьте в свой код зашифрованное значение (например,'% LET TERA_PWD = {sas002} ax = 5qZhw4 ...; '). –

ответ

0

Не удается определить, ищете ли вы предложения по альтернативным подходам или для помощи при отправке по электронной почте.

Для отправки по электронной почте, что-то вроде ниже (непроверенные) должно работать:

filename __mymail email 
    to="[email protected]" 
    from="[email protected]" 
    subject="credential error" 
    attach="/home/mylog.log" 
; 

data _null_; 
    file __mymail; 
    put "Hi!"; 
run; 

Обратите внимание на сервер, где SAS выполняет должен иметь доступ к почтовому серверу, а код необходимости может меняться в зависимости от протокола почты, и т.д. .

Для прикрепления журнала, вероятно, потребуется использовать PROC PRINTTO для записи вашего журнала в файл, а затем снова использовать PROC PRINTTO, чтобы отпустить файл, прежде чем отправлять его по электронной почте.

HTH

Смежные вопросы