SAS 条件 Libname 分配和错误日志
SAS Conditional Libname Assignments and Error Log
我正在使用 SAS Enterprise Guide 6.1 并利用“工具”、“SAS 程序”下的 "Submit SAS Code when server is connected" 功能来提交我所有的个人凭证、libnames。是的,我知道使用 SAS Management Console 可能有更简单的方法来执行此操作,但目前不可行。
我有几个 Teradata 库需要在每个项目中分配,但问题是有时我(或更常见的是我团队中的其他人)会更改我的密码而忘记在启动代码中更改它.这导致了几次不正确的尝试,并立即将我锁在门外。我想做几件事:
创建条件库名称分配,如果凭据正确,将执行所有库名称。
如果凭据不正确,则不会执行 libnames(这样我就不会把自己锁在外面)。
由于 "Submit SAS Code when server is connected" 部分中的 SAS 代码似乎没有生成日志,我希望给自己发送一封附有 SAS 日志的电子邮件(仅当凭据失败时) .
终止服务器连接(如果凭据出错)以避免进一步尝试分配库。
这是我的尝试,我在附加日志和设置电子邮件声明时遇到问题。
*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;
谢谢。
无法判断您是在寻找有关替代方法的建议,还是在寻求电子邮件方面的帮助。
对于电子邮件,如下所示(未经测试)应该有效:
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
我正在使用 SAS Enterprise Guide 6.1 并利用“工具”、“SAS 程序”下的 "Submit SAS Code when server is connected" 功能来提交我所有的个人凭证、libnames。是的,我知道使用 SAS Management Console 可能有更简单的方法来执行此操作,但目前不可行。
我有几个 Teradata 库需要在每个项目中分配,但问题是有时我(或更常见的是我团队中的其他人)会更改我的密码而忘记在启动代码中更改它.这导致了几次不正确的尝试,并立即将我锁在门外。我想做几件事:
创建条件库名称分配,如果凭据正确,将执行所有库名称。
如果凭据不正确,则不会执行 libnames(这样我就不会把自己锁在外面)。
由于 "Submit SAS Code when server is connected" 部分中的 SAS 代码似乎没有生成日志,我希望给自己发送一封附有 SAS 日志的电子邮件(仅当凭据失败时) .
终止服务器连接(如果凭据出错)以避免进一步尝试分配库。
这是我的尝试,我在附加日志和设置电子邮件声明时遇到问题。
*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;
谢谢。
无法判断您是在寻找有关替代方法的建议,还是在寻求电子邮件方面的帮助。
对于电子邮件,如下所示(未经测试)应该有效:
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