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

Email ID's from a SAS Dataset in Body

我试图在电子邮件中发送 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...

试试这个:

%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,您只需在 file 语句中使用 mod 关键字修改现有文件,然后以相同的方式写入观察结果。

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;