趁着今天还有一些折腾劲,分享一些关于SAS批量导入EXCEL的技巧。关于这个问题,论坛里其实也有很多前辈们做过讨论,在此,做一个并不成熟的总结。
1. SAS 导入EXCEL的方法
2. 我们可能面临的情形:
3. 相应的解决方案
4. 相应的宏程序
(1)macro im_excel
- %macro im_excel
- (/*positional parameters:keep in order*/
- /*<libref>.SAS-data-set*/ dsn
- ,/*fileref | "filepath"*/file
- /*keyword parameters*/
- ,/*DBMS types: EXCEL | EXCELCS | XLS | XLSX */ dbms=excel
- ,/*replace: (blank) | REPLACE */ replace=replace
- ,/*range of spreedsheet:
- (blank) | rangename|sheet$ | sheet$UR:LR */range=
- ,/*firstobs : N*/ firstobs=1
- ,/*obs: N */ obs=1048576
- ,/*YES|NO */ getnames=yes
- ,/*YES|NO */ scantext=yes
- ,/*YES|NO */ scantime=yes
- ,/*YES|NO */ usedate=yes
- ,/*YES|NO */ mixed=no
- );
- proc import out=&dsn
- datafile=&file
- dbms=&dbms &replace;
- range="&range";
- dbdsopts="firstobs=&firstobs obs=&obs";
- getnames=&getnames;
- scantext=&scantext;
- scantime=&scantime;
- usedate=&usedate;
- mixed=&mixed;
- run;
- %mend im_excel;
- %macro im_1m1excel(RootPath,FileName,Extension);
- libname MyExcel Excel "&RootPath.\&Filename..&Extension";
- proc sql noprint;
- select catt(trim(libname),'.',quote(trim(memname)),'n')
- into: namelist seperated by ' '
- from dictionary.tables
- where libname in ('MYEXCEL');
- quit;
- %put &namelist;
- data &FileName;
- set &namelist;
- run;
- %mend im_1m1excel;
(3)macro im_m1mexcel
- %macro im_m1mexcel(dir=) ;
- filename indata pipe "dir &dir /b";
- data FileName;
- length fname $20.;
- infile indata truncover;
- input fname $20.;
- dname=scan(fname,1,".");
- call symputx(cats('File',_n_),fname);
- call symputx(cats('ds',_n_),dname);
- call symputx('NumFile',_n_);
- run;
- %do i=1 %to &NumFile;
- proc import out=&&ds&i
- datafile="&Dir\&&file&i"
- dbms=excel replace;
- run;
- %end;
- %mend;
若觉得有用,小伙伴们请给个好评吧!



雷达卡








京公网安备 11010802022788号







