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