来自Body数据集中的SAS数据集的电子邮件ID

时间:2015-05-27 16:59:51

标签: email sas

我试图在电子邮件中发送SAS数据集的ID,但无法获得正确的格式。我只需要纯文本,因为html会卡住并且变慢。在此先感谢您的帮助!任何一种解决方案都会很好。

我有一个ID列。第一个解决方案是提供一个完整的列表,如

%include "/saswrk/go/scripts/envsetup.sas";
filename mymail email "&emaillist."
subject="  &env. Records Transferred on %sysfunc(date(),yymmdd10.)";
data null;
set WORKGO.recds_processed;
file mymail;
put (_all_)(=);
run; quit;

输出

ID=1
ID=2
ID=3
ID=4
ID=5

如果我能得到计数和输出那就太好了 处理的记录数= 6,ID为1,2,3 ......

1 个答案:

答案 0 :(得分:0)

试试这个:

%include '/saswrk/go/scripts/envsetup.sas';

filename mymail email "&emaillist"
    subject = "&env Records Transferred on %sysfunc(date(), yymmdd10.)";

data _null_;
    length id_list $ 3000;
    retain id_list '';

    set workgo.recds_processed nobs = nobs end = eof;
    file mymail;

    if _n_ = 1 then do;
        put 'Number of records processed=' nobs;
        put 'The IDs are:';
    end;

    /* Print the IDs in chunks */
    if length(strip(id_list)) > 2000 then do;
        put id_list;
        call missing(id_list);
    end;

    call catx(', ', id_list, id);

    if eof then put id_list;
run;

在数据步骤的第一次迭代中,当_n_ = 1时,数据集中的观察数量将写入文件。

然后,在每次迭代时,将当前ID附加到以逗号分隔的ID列表中。当列表的长度超过2,000时,将打印列表的内容,并将列表重置为空。这可确保永远不会达到SAS字符串的最大长度,从而避免错误。

当到达输入数据集的末尾时,输出列表的当前内容。

这将为您提供多个以逗号分隔的ID块,其中每个块由换行符分隔。

要附加第二个数据集中的ID,您只需使用mod语句中的file关键字修改现有文件,然后以相同的方式编写观察结果。

data _null_;
    length id_list $ 3000;
    retain id_list '';

    set workgo.recds_not_processed nobs = nobs end = eof;
    file mymail mod;

    if _n_ = 1 then do;
        put 'Number of records not processed=' nobs;
        put 'The IDs are:';
    end;

    /* Print the IDs in chunks */
    if length(strip(id_list)) > 2000 then do;
        put id_list;
        call missing(id_list);
    end;

    call catx(', ', id_list, id);

    if eof then put id_list;
run;