如何用SAS发送邮件

2020-07-16 09:53:15 浏览数 (1)

SAS程序猿/媛在工作中可能会碰到需要用SAS来发送邮件通知的问题,如将一个宏程序执行信息或者某个程序生成的结果发送给指定用户。如上图,就是一个宏执行完毕后发送的一个邮件通知,内容包括宏程序是否正确执行完毕、生成结果的路径以及结果的一个简单的概括。下面记录下我用到的两种SAS发送邮件方法:

  1. FILENAME EMAIL,这个语句可以实现有FORMAT的内容在邮件正文中。比如上图中定义的颜色。程序如下:
代码语言:javascript复制
data uni(drop=rc: i);
    if _n_=1 then do;
        if 0 then set sashelp.class;
        dcl hash h1(dataset: 'sashelp.class', multidata:'y');
        h1.definekey('WEIGHT');
        h1.definedata(all: 'yes');
        h1.definedone();

        dcl hash h2(dataset: 'sashelp.class');
        dcl hiter hi('h2');
        h2.definekey('WEIGHT');
        h2.definedone();
    end;
    rc1=hi.first();
    do while(rc1=0);
        rc2= h1.find();
        i=0;
        do while(rc2=0 and i < 2);
            i 1;
            rc2=h1.find_next();
        end;
        if i < 2 then do;
            output;
            if i < 2 then h1.remove();
        end;
        rc1=hi.next();
    end;
    h1.output(dataset: 'dup');
run;
  1. 上面是不需要设置邮件信息的,设置的程序如下:
代码语言:javascript复制
options emailsys='smtp' emailauthprotocol='login' emailhost='smtp.163.com' emailid='uemailid@163.com' emailpw='XXXXXXXX';

filename sende email to='huazizeng@gmail.com' subject='Demo';

data _null_;
    file sende;
    put 'Hello world!';
run;
  1. MAILX,程序如下:
代码语言:javascript复制
/*正文*/
x 'cat test.txt | mailx -m -s "subject" huazizeng@gmail.com';
/*附件*/
x 'uuencode test.txt attach.txt | mailx -m -s "subject" huazizeng@gmail.com';
/*正文   附件*/
x '(cat test.txt; uuencode test.txt attach.txt) | mailx -m -s "subject" huazizeng@gmail.com';

需要注意的是,第二种方法中的文本如果有格式(比如有对齐的格式),那么在邮件正文中的格式可能会不正确,对于这种情况建议用第一种方法。

sas

0 人点赞