原标题:SAS—批量导入文件夹下的所有excel文件(对quote函数的简单介绍)
今天分享一段可以把一个文件夹下的所有excel批量导入到sas中的程序。
代码如下:
options validvarname=any;
%macro directory(dir=);
%let rs=%sysfunc(filename(filref,&dir));
%let did=%sysfunc(dopen(&filref));/*打开该文件路径*/
%let nobs=%sysfunc(dnum(&did));/*返回rs文件路径下的文件数*/
%do i=1 %to &nobs.;
%let name=%qscan(%qsysfunc(dread(&did,&i)),1,.);/*读取文件名字*/
%let ext=%qscan(%qsysfunc(dread(&did,&i)),-1,.);/*读取文件格式*/
libname test "&dir.&name..&ext.";/*新建test逻辑库*/
proc sql noprint;
select count(distinct memname) into :number
from sashelp.vmember
where libname="TEST";;
select compress(memname,"$") into :sheet1 - :sheet%left(&number)
from sashelp.vmember
where libname="TEST";
quit;
%do j=1 %to &number;
proc import out=&&sheet&j. datafile="&dir.&name..&ext." dbms=excel replace;
getnames=yes;
sheet="&&sheet&j";
mixed=yes;
run;
%end;
%end;
%let rc=%sysfunc(dclose(&did));
%mend directory;
本段程序主要由3部分组成,第一部分是利用 macro quote对excel文件进行处理;第二部分是利用 sql macro 对excel文件进行宏命名;第三部分就是利用 proc import 导入到sas中。代码很简单,大家简单看一下就好。需要注意的是要把Excel文件的sheet名都要改成sheet1 到sheetn。
现在给大家主要是介绍下quote:
在SAS 系统中有很多特殊字符,如下所示
blank ) = LT
; ( | GE
¬ + AND GT
^ — OR IN
~ * NOT %
, (comma) / EQ &
' < NE #
“ > LE
这时就需要用到quote函数了,quote 函数的作用是屏蔽一些特殊字符,使得 SAS 系统把这些特殊字符当成普通字符来看待。
背后的原理如下:SAS 系统所有的宏变量及其取值都存在一张表中,对于使用了 quote函数 的字符 SAS 在存储时会给这些特殊字符加上前缀和后缀,SAS 宏处理器对该宏变量做字符串替换时把前缀和后缀去掉,用其原始值来完成替换。
比如逗号","既可以用来分隔某个宏调用或宏函数的参数(%scan(参数,2,'',")),也可以作为某个宏变量的值中一个普通的字符(%let value=part1,part2;)。返回搜狐,查看更多
责任编辑: