楼主: 落日烟雨轻
18752 47

[程序分享] SAS程序实现日常报表的全自动化   [推广有奖]

  • 0关注
  • 1粉丝

博士生

19%

还不是VIP/贵宾

-

威望
0
论坛币
39693 个
通用积分
107.8619
学术水平
14 点
热心指数
15 点
信用等级
13 点
经验
25644 点
帖子
155
精华
0
在线时间
272 小时
注册时间
2010-3-12
最后登录
2024-3-6

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
  1. /*  该sas文件旨在说明如何编写一次完成以后不用任何人手更改(包括更改日期、excel的格式等)的常规报表;
  2.     如用邮件自动发送程序,则还可省略发送邮件的过程,做到一次编写,无需跟进(前提是程序经过检验完善);
  3.     可根据个人情况举一反三使用;
  4.     本文来自"OUR SAS"群-"统计-小风"
  5. */

  6. options noxwait noxsync;
  7. x '"D:\报表模板.xlsx"';     /* 该文件为固定的报表模板,可以事先调整好单元格格式、字体颜色,事先写好其他不变的内容 */
  8. data _null_;
  9. rc=sleep(10);               /* sas睡眠10秒,是为了给打开上述文件留时间 */
  10. run;

  11. data _null_;                /* 此处设定各类时间,比如你要读取的文件是包含时间的,如test2012-05-16,就是用当天的时间、
  12. sas程序运行的时间去得到这个"2012-05-16";另外一种是你要生成的excel文件是包含时间的,也在这里处理得出 */
  13. x=put(date()-1,yymmdd10.);   /* 比如每日运行这个程序,处理前一日的文件,就是用date()-1 */
  14. y=substr(x,6,2)||substr(x,9,2)||"b";
  15. z=compress(input(substr(x,6,2),best8.)||"."||input(substr(x,9,2),best8.));
  16. call symput("path",y);
  17. call symput("path2",z);
  18. run;

  19. %let log=alla_&path;        /* 我要处理的文件名就是 alla_0516b 这种形式 */

  20. libname result "D:\test";
  21. data temp1(compress=yes);
  22. set result.&log;            /* 类似这样应用 */
  23. run;

  24. /* 中间是你数据处理的过程,省略 */

  25. filename r1 dde 'excel|[报表模板.xlsx]自定义表名1!r5c1:r60c6' ;  /* 对某张表某些单元格进行写入 */
  26. data _null_;
  27. set result1;
  28. file r1 notab linesize=2000;    /* DDE默认空格为分隔符,如果一个变量中间有空格将会分开到两个单元格,用notab即可避免,
  29. linesize赋予一个足够大的值,则过长的变量不会错行 */
  30. put date '09'x time '09'x source '09'x duration '09'x sql '09'x type;
  31. run;

  32. filename r1 dde 'excel|[报表模板.xlsx]自定义表名2!r5c1:r60c6' ;   /*  继续写入下一张表 */
  33. data _null_;
  34. set result2;
  35. file r1 notab linesize=2000;
  36. put date '09'x time '09'x source '09'x duration'09'x  sql '09'x type;
  37. run;

  38. filename r1 dde "excel|system";  
  39. data _null_;
  40. file r1;
  41. put '[workbook.activate("自定义表名2")]';  /* 激活其中一张表 */
  42. put '[row.height(0,"A1:A1",false,3)]';    /* 调整行高;类似这样的跟vba比较像 */
  43. put '[workbook.activate("自定义表名1")]';
  44. put '[row.height(0,"A1:A1",false,3)]';
  45. x= compress('[save.as("D:\sql('||&path2||').xlsx")]');  /* 存储一个备份到某个路径,文件名为 sql(5.16).xlsx  */
  46. put x;
  47. y= compress('[save.as("E:\MailFile\sql('||&path2||').xlsx")]');  /* 存储到邮件文件夹,这样由邮件自动发送excel出去 */
  48. put y;
  49. put '[quit]';
  50. run;

  51. /*整个程序如上,然后txt写如下内容另存为bat文件,在windows-附件-系统工具-任务计划程序里面设置每日凌晨运行这个bat即可:
  52. D:
  53. cd: "D:\sas_program\sas\sasfoundation\9.2\"
  54. sas.exe -sysin "D:\thisprogramname.sas" -altlog "D:\test\log.log"
  55. */

  56. /* 上述bat第二行是你sas程序的路径,第三行表示执行的sas程序的路径和名字,然后将sas运行的日志写入到log.log中,
  57. 以便事后查看日志 */
复制代码


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:sas程序 全自动 自动化 foundation compress 报表 日常 程序

已有 4 人评分学术水平 热心指数 信用等级 收起 理由
iaujin + 1 + 1 精彩帖子
yugao1986 + 1 + 1 + 1 奖励积极上传好的资料
zhangzachary + 1 Thanks for sharing
rollery + 1 + 1 + 1 观点有启发

总评分: 学术水平 + 3  热心指数 + 4  信用等级 + 2   查看全部评分

本帖被以下文库推荐

沙发
rollery 在职认证  发表于 2012-5-17 17:00:55 |只看作者 |坛友微信交流群
支持下
从统计学角度看,现实生活只是我们人生的一次样本实现。

使用道具

藤椅
bambu 发表于 2012-5-17 19:18:15 |只看作者 |坛友微信交流群
赞一个,呵呵。

使用道具

板凳
gaotao0727 发表于 2012-5-17 21:44:21 |只看作者 |坛友微信交流群
学习中~~~
衣带渐宽终不悔,为伊消得人憔悴~~

使用道具

报纸
aloecool 发表于 2012-5-17 22:49:35 |只看作者 |坛友微信交流群
为什么我执行"x '"D:\报表模板.xlsx"';  "语句会出现这个错误?有option设置错误吗? 谢谢先!
ERROR: Shell escape is not valid in this SAS session.

使用道具

地板
zwjzmlove 发表于 2012-5-17 22:57:48 |只看作者 |坛友微信交流群
lz威武

使用道具

7
YobachiLiu 发表于 2012-5-18 09:05:04 |只看作者 |坛友微信交流群
thank you for share!

使用道具

8
semenljw 在职认证  发表于 2012-6-15 09:28:09 |只看作者 |坛友微信交流群
经典!!!!!!!!!!!!!!!

使用道具

9
ryuuzt 发表于 2012-6-15 10:17:25 |只看作者 |坛友微信交流群
学习了,谢谢。

使用道具

10
gds_123 发表于 2012-6-15 15:17:11 |只看作者 |坛友微信交流群
支持

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-19 15:29