楼主: renli2012bj
4868 1

[程序分享] sas批量建立数据集和导出excel等文件-宏应用,sas base,advanced等资料免费送 [推广有奖]

  • 5关注
  • 5粉丝

大专生

90%

还不是VIP/贵宾

-

威望
0
论坛币
15 个
通用积分
1.0000
学术水平
5 点
热心指数
5 点
信用等级
5 点
经验
470 点
帖子
16
精华
0
在线时间
105 小时
注册时间
2015-7-5
最后登录
2023-7-25

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

在《sas应用之批量拆分生成数据集及导出》中有列举该应用,当时是分了几个步骤,容易产生导出的excel文件名称和其内容不一致的情况。在这我们将这样的过程放在一个宏中去实现,使用%do循环,在每个循环中完成建立一个数据集和对应excel文件导出。程序如下:

/*建立test41逻辑库和数据集存储路径*/

%let path=D:\develop\SAS\41数据输出之excel;

libname test41 "&path.\data";

options user=test41;

/*创建宏*/

%macro b(group,dset);

/*使用sql创建两个宏变量,一个是存储类别名称,一个类别的个数*/

proc sql noprint;

     select distinct &group.into : m_group

            separated by  ',' from &dset.;

     select count(distinct &group.) into :  

           m_group_cnt from &dset.;

quit;

/*使用循环语句创建数据集和导出excel文件*/

%do i=1%to &m_group_cnt.;

%let group_name=%scan(%bquote(&m_group.),&i.,%str(,));

%put &group_name.;

    data &group_name.;

      set &dset.;

      where&group. in ( "&group_name.");

    run;

    proc export data=&group_name

        outfile="&path.\result\数据输出test.xlsx"

        DBMS=excel  REPLACE;

        sheet="&group_name";

      RUN;

      %end;

%mend;

%b(LEVEL,sashelp.Adsmsg);

无标题.png
我们知道office2010最大存储行为1048576,列为16384.当导出的行太多需要事先做个判断,在一个表单中是否能容纳,否则拆分表格或者考虑其他导出格式,如.sav等。
更多精彩请关注“sas应用分析”微信公众号,sas base,advanced和clinical trial认证资料免费送。
2133257862te16e87e7e80.png

二维码

扫码加我 拉你入群

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

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

关键词:Advanced SAS base ADVANCE advan VANCE 批量导出文件 sas 认证资料

沙发
GIS小生 发表于 2018-5-19 18:31:08 |只看作者 |坛友微信交流群
大神问一下,我改成了这样/*创建宏*/
proc import out=a1
datafile = "D:\每木检尺\北林每木检尺.xlsx"
DBMS = xlsx replace;                                                                                                      
getnames=yes;
run;
data a2;
set a1;
G=VAR7;
A=VAR1;
E=VAR5;
B=VAR4;

run;
data a3;
set a2;
keep A B E G;
if G="" then delete;
run;
%macro b(group,dset);


/*使用sql创建两个宏变量,一个是存储类别名称,一个类别的个数*/

proc sql noprint;

     select distinct &group. into:m_group

           from &dset.;

     select count(distinct &group.) into :  

           m_group_cnt from &dset.;

quit;
%mend;

/*使用循环语句创建数据集和导出excel文件*/

%do i=1%to &m_group_cnt.;

%let group_name=%scan(%bquote(&m_group.),&i.,%str(,));

%put &group_name.;

    data &group_name.;

      set &dset.;

      where&group. in ( "&group_name.");

    run;

    proc export data=&group_name


outfile= "C:\Users\ASUS\Desktop\样地信息\&group_name..xlsx"
dbms=xlsx;

      RUN;

      %end;

%mend;

%b(A,A3);
A是唯一值字段,为什么运行不了。。。。第一回用宏很懵。。。。

使用道具

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

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

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

GMT+8, 2024-4-25 17:27