首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SAS DDE(Dynamic data exchange ) output Excel

SAS DDE(Dynamic data exchange ) output Excel

作者头像
Setup
发布2019-10-21 17:09:30
1.7K0
发布2019-10-21 17:09:30
举报
SAS将数据集输出成Excel的方法有很多:
  • 最简洁的:proc export(无法输出format)
  • 最常见的:ods tagsets.excelxp(输出的文件超级大动辄数百兆)
  • 最强大的:SAS DDE输出(功能多而全,输出文件较小)
先来看一段很有视觉效果的:短片!(这是通过SAS程序实现的自动化)
视频内容

DDE输出也是我最近get到的新技能,由于之前一直Tagsets输出Excel发现Tagsets输出有一些弊端,在数据量非常大的时候运行时间长,而且文件也会被放大。最近恰巧从朋友那儿看到了DDE输出相关的程序,然后就开始学习研究,目前也是一直半解,如有不当之处还望指正。



如何实现通过DDE的方式进行输出数据集呢,

  • 首先需要启动Excel

0.0 很多文献和相关资料都是这样写的(代码如下)为啥这样写,我也不知道,

反正能达到打开Excel的目的。

options noxsync noxwait;

filename sas2xl dde 'excel|system';

data _null_;

length fid rc start stop time 8;

fid=fopen("sas2xl",'s');

if (fid le 0) then do;

rc=system('start excel');

start=datetime();

stop=start+10;

do while (fid le 0);

put fid;

fid=fopen("sas2xl",'s');

time=datetime();

if (time ge stop) then fid=1;

end;

end;

rc=fclose(fid);

run;

  • 接着就是新建一个Excel文件:

data _null_;

file sas2xl;

put '[error(false)]';

put '[new(1)]';

put '[save.as("E:\Class.xlsx")]';

put '[file.close(false)]';

run;

x "E:\Class.xlsx";

  • 接着就是运用filename向Excel里面写内容:

filename recrange dde "excel|Class.xlsx]sheet1!r1c1:r1c6" notab;

data _null_;

file recrange;

put "SEX " '09x';

run;

filename recrange dde "excel|Class.xlsx]sheet1!r2c1:r2c6" notab;

data _null_;

set sashelp.class;

file recrange;

put SEX '09x';

run;


注释:"excel|Class.xlsx]sheet1!r1c1:r1c6"中class.xlsx为新建Excel名称,sheet1为新建Excel里面激活的一个sheet也是向里面写数据,后面可以通过rename来实现自定义sheet名称。r表示第几行,C表示第几列,:表示 “至” 。。这样就可以精确的控制你要输出的数据随心所意的放在Excel的中的那个位置了。第一个filename 是先将变量名输入到Excel 或者label名称输入到Excel。

在真正输出的过程中,操作方法如下:

1.先获取待输出数据集的变量结构,proc contents 或者sql 中的数据集字典的方式 获取变量的label/变量名称然后通过复制给一个宏变量,通过第一个filname将变量名给输出到Excel

2.第二个filename是为为了将数据集需要输出的数据进行输出,这个时候我也通过赋值宏变量的方式进行操作,因为写成宏以后只用填写数据集和输出路径就可以实现输出。


  • 放完数据后呢,我们就可以调整Excel格式啊,字体样式啊,是否筛选啊等等(这部分具体操作见文末赋上的网盘地址中关于DDE输出很经典的PDF的书以及一个SAS程序的例子里面很全喔)
  • 最后呢,就是保存Excel:

filename end dde "excel|system";

data _null_;

file end;

put '[workbook.name("Sheet1","UK")]';

put '[save]';

put '[quit()]';

run;



本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-11-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SAS程序分享号号号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档