如何在SAS邮件正文中同时嵌入图表与表格?
SAS实现图表与表格同屏邮件正文的解决方案
核心思路是分别生成图表和表格的HTML片段,将二者整合为一个完整的HTML文档后,以HTML格式发送邮件。
具体步骤与代码示例
1. 生成图表的HTML片段
使用PROC SGPLOT生成图表,通过ODS HTML输出为HTML文件:
ods html file="temp_chart.html" style=htmlblue; proc sgplot data=sashelp.class; hbar age / response=height group=sex; run; ods html close;
2. 生成表格的HTML片段
用PROC PRINT(或其他报表过程)生成表格,同样通过ODS HTML输出:
ods html file="temp_table.html" style=htmlblue; proc print data=sashelp.class noobs; run; ods html close;
3. 合并HTML内容为完整邮件正文
编写DATA步读取两个临时HTML文件,提取正文部分并合并成标准HTML文档:
data _null_; file "final_email.html"; /* 写入HTML基础结构 */ put '<!DOCTYPE html>'; put '<html><head>'; put '<title>班级信息报表</title>'; put '<style>body {font-family: Arial, sans-serif; margin: 20px;}</style>'; put '</head><body>'; /* 插入图表内容 */ put '<h3>学生身高分布</h3>'; infile "temp_chart.html" truncover; input line $char1000.; /* 跳过HTML头部,定位到body内内容 */ do while(index(line,'<body') = 0); input line $char1000.; end; input line $char1000.; do while(index(line,'</body') = 0); put line; input line $char1000.; end; /* 添加分隔线,插入表格内容 */ put '<hr style="margin: 20px 0;">'; put '<h3>学生详细信息表</h3>'; infile "temp_table.html" truncover; input line $char1000.; do while(index(line,'<body') = 0); input line $char1000.; end; input line $char1000.; do while(index(line,'</body') = 0); put line; input line $char1000.; end; put '</body></html>'; run;
4. 发送HTML格式邮件
通过FILENAME EMAIL指定邮件参数,读取合并后的HTML文件作为正文发送:
filename email email to='收件人邮箱@xxx.com' from='发件人邮箱@xxx.com' subject='SAS报表:图表+表格整合' type='text/html'; data _null_; file email; infile "final_email.html" truncover; input line $char1000.; put line; run; filename email clear;
关键说明
- 提取HTML正文时,通过判断
<body>和</body>标签,避免重复的HTML头部/尾部代码干扰邮件渲染 - 可通过调整
style参数自定义邮件的字体、边距等样式,提升可读性 - 若使用其他报表过程(如
PROC REPORT)生成表格,只需替换对应PROC代码即可
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

