再次查看code后,方法一中应受%syscall set的影响,生成了带空格的宏变量。如下修改的方法1就没问题了
而方法2经简化排查,call set 生成的宏变量确实是带空格的。目前还没发现有可以使用对call set宏变量trim的方法
- /*方法1*/
- data excel;
- n=_n_;
- input sheet $9. var $6.;
- datalines;
- sheet1 sheet
- biao2 sheet
- try3 sheet
- test4 sheet
- finalyeah sheet
- ;
- run;
- %macro callset;
- %let dsid=%sysfunc(open(excel));
- %let nobs=%sysfunc(attrn(&dsid, nobs));/*数据库属性*/
- %do i=1 %to &nobs;
- data _null_;
- set excel;
- where &i=n;
- call symputx(var,sheet);
- run;
- PROC IMPORT OUT= WORK.a&i
- DATAFILE= "保存路径\multiple_xlsx.xlsx"
- DBMS=EXCEL REPLACE;
- RANGE="&sheet.$";
- GETNAMES=YES;
- MIXED=NO;
- SCANTEXT=YES;
- USEDATE=YES;
- SCANTIME=YES;
- RUN;
- %end;
- %let dsid=%sysfunc(close(&dsid));
- %mend;
- %callset;
- /*方法2*/
- data excel;
- input sheet $9.;
- datalines;
- sheet1
- biao2
- try3
- test4
- finalyeah
- ;
- run;
- %macro callset;
- %let dsid=%sysfunc(open(excel));
- %let nobs=%sysfunc(attrn(&dsid, nobs));/*数据库属性*/
- %syscall set(dsid);/*与数据库联系起来,生成的宏变量为该数据库的所有变量名*/
- %do i=1 %to &nobs;
- %let rc=%sysfunc(fetchobs(&dsid, &i));
- %put &sheet after;
- %end;
- %let dsid=%sysfunc(close(&dsid));
- %mend;
- %callset;
复制代码