在前面几篇中我们已经介绍过很多次sas数据输出到excel的方法了,包括分组输出、分sheet页输出;本次在这里再次提出输出到excel的方法,主要是考虑到一些别样的方法,令人耳目一新的思路。
一、程序思路首先,在data步中只读取到数据集的数据量信息,然后stop退出,这样处理效率非常高。其次,在分页输出时,预先规定每页好需要输出的数量,然后通过firstobs和obs控制每页输出量。
二、程序如下:
options mprint;
%macro out_put_xls(dset,fdir,num=65000);
data _null_;
set &dset. nobs=obs;
call symput("obs_cnt",obs);
stop;
run;
libname ex excel"&fdir.";
%do i=1%to &obs_cnt.%by &num.;
%let k=%sysfunc(int(%eval((&i+&num)/&num)));
%let j=%sysfunc(int(%eval(&num*&k)));
data ex.第&k.页(dblabel=yes);
set &dset.(firstobs=&i obs=&j);
run;
%end;
%mend;
%out_put_xls(sashelp.bweight,D:\Bweight.xlsx,num=10000);
在该宏中:
-
set语句nobs=选项获取复制数据集观测对象总数obs;
-
将obs值赋值给宏变量obs_cnt;
-
&num规定每页输出观测对象数,K值获取每个循环页码数;
-
J确定每个页码最末观测对象序号_n_;
-
最后通过限定firstobs和obs来控制数据集的分页输出。
举例,在sashelp逻辑库的Bweight数据集共50000个观测对象,如果想将这个数据集拆分成5个excel表存储,那么每页需要放10000个,
上述宏中,宏变量num=10000,obs_cnt=obs=50000,
在第一个循环中,
K=%sysfunc(int(%eval((&i+&num)/&num)))=(1+10000)/100000取整为1;
j=%sysfunc(int(%eval(&num*&k)))=10000*1;firstobs=1,obs=10000;
那么第一页就是bweight的前10000个观测对象,一次类推。
编辑:任丽
微信号: sas应用分析
简书:http://www.jianshu.com/p/0e787b555768
原文链接:
https://mp.weixin.qq.com/s?__biz=MzIyNTE2MzM3MA==&mid=2650116647&idx=1&sn=60727596e55e8bb0d0da69bb17426f34&scene=1&srcid=0717ozJX5pD7MxdklwaOlWVN&pass_ticket=zNwjzm3JBFGW%2Bp%2F%2Bmgkw8g%2FNFG3t6EfHUODycUJN2DC%2BTOZIJSI27gv1vv3VKu%2F5#rd