SAS - 如何从现有表中的信息导入数据

时间:2014-02-15 06:15:57

标签: macros import sas

我需要每个月将几个文件导入到库中,并且我认为通过创建包含所有文件信息(路径,名称,工作表,类型)的.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;

1 个答案:

答案 0 :(得分:0)

我不知道您的工作表列中的内容,但是从此声明中可以看出:

call symput('sheet',trim(Worksheet)||'$');

我可以猜测它是不带引号的字符串,而PROC IMPORT中的RANGE选项需要引用的字符串:

RANGE=&sheet;

考虑用双引号括起& sheet。如果找不到指定的范围,PROC IMPORT会抛出一些有趣的错误。

[编辑] P.S.这是一个典型的例子,CALL EXECUTE会更方便。