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函数,提取了excel中sheet名字并变成宏变量。 2、将多个sheet里面的数据合并为一个数据集 其实如果将多个sheet导入了多个数据集里面,之后的合并方法有很多了。Data步中set语句,sql中OUTER 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; 参考: 如何合并sas数据集和一个EXCEL文件中的两个sheet 求把excel中多个sheet导入SAS,多个sheet
|