【问题标题】:SAS Conditional Libname Assignments and Error LogSAS 条件库名称分配和错误日志
【发布时间】:2015-01-04 02:10:02
【问题描述】:

我正在使用 SAS Enterprise Guide 6.1,并且正在使用工具、SAS 程序下的“连接服务器时提交 SAS 代码”功能来提交我的所有个人凭据 libnames。是的,我知道使用 SAS Management Console 可能有一种更简单的方法来执行此操作,但目前还不能这样做。

我需要在每个项目中分配多个 Teradata 库,但问题是有时我(或更常见的是我团队中的其他人)会更改我的密码而忘记在启动代码中更改它。这导致了几次不正确的尝试,并立即将我锁定在外。我想做几件事:

  1. 创建一个条件库名分配,如果凭据正确,它将执行所有库名。

  2. 如果凭据不正确,则不会执行 libnames(这样我就不会将自己锁定)。

  3. 由于“连接服务器时提交 SAS 代码”部分中的 SAS 代码似乎没有生成日志,我希望给自己发送一封附有 SAS 日志的电子邮件(仅当凭据失败时) .

  4. 终止服务器连接(如果凭据出错)以避免进一步尝试分配库。

这是我的尝试,我在附加日志和设置电子邮件声明时遇到问题。

*Define personal credentials;
%let myemail=gollum@middleearth.com;
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;

谢谢。

【问题讨论】:

  • 有时使用 libname 函数而不是 libname 语句更容易。
  • 如果您要在代码中嵌入密码,请使用PROC PWENCODE 对其进行加密,然后在您的代码中嵌入加密值(例如%LET TERA_PWD = {sas002}ax=5qZhw4... ;)。

标签: sas


【解决方案1】:

不知道您是在寻找有关替代方法的建议,还是寻求电子邮件方面的帮助。

对于电子邮件,如下所示(未经测试)应该可以工作:

filename __mymail email
  to="gollum@middleearth.com"
  from="gollum@middleearth.com"
  subject="credential error"
  attach="/home/mylog.log"
;

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

请注意,执行 SAS 的服务器必须有权访问邮件服务器,并且所需的实际代码可能因邮件协议等而异。

为了附加日志,可能需要使用 PROC PRINTTO 将日志写入文件,然后在通过电子邮件发送文件之前再次使用 PROC PRINTTO 释放文件。

HTH

【讨论】:

    猜你喜欢
    • 2019-05-01
    • 2017-08-20
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多