我需要每个月将几个文件导入到库中,并且我认为通过创建包含所有文件信息(路径,名称,工作表,类型)的.csv并使用宏来循环并带来它会使其变得简单在信息中;但是当我传递一个宏变量时,它不喜欢它。如果我只是把信息放在那里,proc导入工作正常。我环顾四周,发现宏的编译方式与proc语句不同;但我拒绝相信我必须写出30个proc import语句才能获得这些文件。从.csv管理起来要容易得多。请看一下并提供您的建议。 谢谢!
PROC IMPORT OUT= FileInfo
DATAFILE= 'C:\folder'
DBMS=CSV REPLACE;
GETNAMES=YES;
DATAROW=2;
RUN;
%Macro BringIt();
DATA _NULL_;
IF 0 THEN SET FileInfo NOBS=X;
CALL SYMPUT('RCRDS',X);
STOP;
RUN;
%Do i=1 %to &RCRDS;
data _null_;
set FileInfo (firstobs=&i);
call symput('Fname',FLEname);
call symput('Ftype',FLEtype);
call symput('sheet',trim(Worksheet)||'$');
call symput('Slib',SASlib);
call symput('Sname',SASname);
call symput('loc',FLELocation||'\'||FLEname||fletype);
stop;
run;
*if &Ftype='.xlsx' then
do;
PROC IMPORT OUT=&sname
DATAFILE=&loc
DBMS=EXCEL REPLACE;
RANGE=&sheet;
GETNAMES=YES;
MIXED=NO;
SCANTEXT=YES;
USEDATE=YES;
SCANTIME=YES;
RUN;
*end;
/*end*/
%end;
%mend BringIt;
%BringIt();
run;
答案 0 :(得分:0)
我不知道您的工作表列中的内容,但是从此声明中可以看出:
call symput('sheet',trim(Worksheet)||'$');
我可以猜测它是不带引号的字符串,而PROC IMPORT中的RANGE选项需要引用的字符串:
RANGE=&sheet;
考虑用双引号括起& sheet。如果找不到指定的范围,PROC IMPORT会抛出一些有趣的错误。
[编辑] P.S.这是一个典型的例子,CALL EXECUTE会更方便。