2014-02-15 40 views
0

我需要每月将多个文件导入到库中,并认为我可以通过创建带有所有文件信息(路径,名称,工作表,类型)并使用宏循环并引入信息;但是当我将它传递给一个宏变量时它不喜欢它。如果我只是把信息放在那里,proc导入就可以正常工作。我环顾四周,看到宏的编译与proc语句不同,但我拒绝相信为了获取这些文件,我必须写出30个proc import语句。从.csv管理起来要容易得多。请看看并提供建议。 谢谢!SAS - 如何从现有表格中的信息导入数据

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

我不知道什么是您的工作表列,但此声明:

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

我能猜出它是加引号的字符串而在PROC IMPORT RANGE选项都想带引号的字符串:

RANGE=&sheet; 

考虑用双引号括住&表。如果PROC IMPORT找不到指定的范围,它会引发一些有趣的错误。

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

+0

谢谢ton @Anton!你的编辑笔记和关于报价的评论做了一个让我震惊的伎俩。像在一个执行我只是传递字符执行到我需要包括他们周围的“'”。我调整了我的symputs,现在一切都很好: call symput('loc',''“|| trim(FLELocation)||'\'|| trim(FLEname)|| trim(fletype)||”'“) ; – RedMosquito

+0

抱歉,我是新来的,无法弄清楚如何在回复中获取代码格式。但是我会因为帮助我而信任你。另外,我的.csv文件包含引号中的所有内容,所以我不知道为什么我需要修剪它,但它之前给了我空间。 – RedMosquito

相关问题