楼主: 龙潭丰乐
4387 2

多个sheet导入sas里面 [推广有奖]

  • 14关注
  • 4粉丝

已卖:115份资源

讲师

50%

还不是VIP/贵宾

-

威望
0
论坛币
6 个
通用积分
0.0600
学术水平
25 点
热心指数
29 点
信用等级
14 点
经验
8649 点
帖子
457
精华
0
在线时间
466 小时
注册时间
2011-11-20
最后登录
2022-1-6

楼主
龙潭丰乐 学生认证  发表于 2013-6-14 21:56:59 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

1、将多个sheet导入多个数据集里面

1)利用sas excel引擎

libname d excel 'C:\Users\quan\Desktop\D题\附件2.xls';

PROC PRINT DATA=d."pa $"N;

RUN;

另外可以直接利用excel引擎里做一些数据变换

data d.total;

set d.'pa $'n d.'pb $'n;

RUN;


这里有两点强调:$符号与数据集名字pa之间一定有一个空格,没有空格的话则会显示下

面这个错误    ERROR: 文件“D.'pa$'n.DATA”不存在。

第二点 n表示引用符号的标记,一定要紧邻单引号或双引号后面,否则也是有错误的。

(2)利用proc import 过程将多个sheet导入指定的逻辑库

libname d 'C:\Users\quan\Desktop\2013夏令营题\D题\附件2.xls';

%macro quan;

proc sql noprint;

   select count (distinct (memname)) INTO :TOT

     from sashelp.vtable

          where libname='D' ;

        SELECT DISTINCT (memname) into :s1-:s%trim(%left(&tot))

          from sashelp.vtable

           where libname='D';

   select distinct(compress(MEMNAME,"',$")) into: v1 - :v%trim(%left(&tot))

      from sashelp.vtable

          where libname='D';

quit;

%DO I=1 %TO &TOT;

%put &&v&i;

%put &&s&i;

proc import datafile= 'C:\Users\quan\Desktop\2013夏令营题\D题\附件2.xls' out=&&v&I replace;

getnames=yes;

range=&&s&I;

run;

%END;

%mend;

%quan;

  

这里利用了sas 数据字典里面的知识。Sashelp.vtable视图保存了sas 所有逻辑库里面的数据名字以及数据所在的逻辑库等等信息。利用了compress函数,提取了excelsheet名字并变成宏变量。

2、将多个sheet里面的数据合并为一个数据集

  其实如果将多个sheet导入了多个数据集里面,之后的合并方法有很多了。Data步中set语句,sqlOUTER UNION,以及append语句都可以做到。

  但是append更为高效点。

libname d 'C:\Users\quan\Desktop\2013夏令营题\D题\附件2.xls';

%macro quan;

proc sql noprint;

   select count (distinct (memname)) INTO :TOT

     from sashelp.vtable

          where libname='D' ;

        SELECT DISTINCT (memname) into :s1-:s%trim(%left(&tot))

          from sashelp.vtable

           where libname='D';

   select distinct(compress(MEMNAME,"',$")) into: v1 - :v%trim(%left(&tot))

      from sashelp.vtable

          where libname='D';

quit;

%DO I=1 %TO &TOT;

%put &&v&i;

%put &&s&i;

proc import datafile= 'C:\Users\quan\Desktop\2013夏令营题\D题\附件2.xls' out=&&v&I replace;

getnames=yes;

range=&&s&I;

run;

/加载到一个数据集,纵向合并时proc append会比data步更有效率/

data all;

  if _n_=0 then set &&v&I;

run;

proc append base=all data=&&v&I force;

run;

%END;

%mend;

%quan;


  

  

参考:

http://crackman.net/?p=243*/

如何合并sas数据集和一个EXCEL文件中的两个sheet

http://www.dataguru.cn/article-2126-1.html

求把excel中多个sheet导入SAS,多个sheet

https://bbs.pinggu.org/thread-1122443-1-1.html



二维码

扫码加我 拉你入群

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

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

关键词:sheet SHE Distinct compress proc sql Desktop excel 夏令营 单引号 双引号

已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
Tigflanker + 5 + 3 + 3 + 3 谢谢,帮了忙~

总评分: 论坛币 + 5  学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

沙发
kongqunyu 发表于 2014-3-17 17:05:39
这个程序运行报错:

WARNING: INTO 子句:s1 到 :s0 没有指定有效的宏变量序列。
NOTE: 没有选择任何行。
WARNING: INTO 子句:v1 到 :v0 没有指定有效的宏变量序列。
NOTE: 没有选择任何行。

藤椅
Tigflanker 发表于 2015-7-21 09:25:53
顶一下,帮了忙,急着用的时候确实很需要。

谢谢

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

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2026-1-7 12:12