在导入时将变量设置为FileName

时间:2015-10-09 16:03:04

标签: excel sas

我使用以下代码一次从文件夹导入多个.XLSX文件。它工作得很好,除了我导入和合并后无法区分每个文件。每个Excel文件都是特定年份的数据,我需要知道我的分析年份。

有没有办法在每次导入时创建一个等于文件名的变量,这样我可以在合并后区分这些文件?

我已经完成了很多工作,通过单独导入每个文件并在合并之前在每个数据集中创建变量,但我正在寻找一种更快的方法来实现这一目标。

filename indata pipe 'dir X:\"Projects"\"Source Data" /b ';
/* put all the .xlsx file names in dataset file_list */
data file_list;
length fname $200 in_name out_name $200;
infile indata truncover;
input fname $ 200.;
in_name=translate(scan(fname,1,'.'),'_','-');
   out_name=cats('_',in_name);                                                                                                       
run;
data _null_;
  set file_list end=last;
  call symputx(cats('dsn',_n_),in_name);
  call symputx(cats('outdsn',_n_),out_name);
  if last then call symputx('n',_n_);
run;
%macro test;

   %do i=1 %to &n;
   PROC IMPORT OUT= work.&&outdsn&i.
            DATAFILE= "X:\Projects\Source Data\&&dsn&i...xlsx"
            DBMS=XLSX REPLACE;
  Range="FundingByYear$A3:J5249";
     GETNAMES=YES;
     MIXED=NO;

RUN;

%end;
%mend;
%test

data final;
  set _:;
run;

1 个答案:

答案 0 :(得分:1)

您可以使用SET语句中的INDSNAME选项获取源DATASET的名称。

data final;
  length dsname temp_dsname $41 ;
  set _: indsname=temp_dsname;
  dsname=temp_dsname;
run;

如果您想要了解源文件的信息,则可以使用它与FILE_LIST数据集合并。