SAS DDE(Dynamic data exchange ) output Excel

2019-10-21 17:09:30 浏览数 (1)

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;



0 人点赞