来自正文中 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;
我试图在电子邮件中发送 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;