我使用以下代码一次从文件夹导入多个.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;
答案 0 :(得分:1)
您可以使用SET语句中的INDSNAME选项获取源DATASET的名称。
data final;
length dsname temp_dsname $41 ;
set _: indsname=temp_dsname;
dsname=temp_dsname;
run;
如果您想要了解源文件的信息,则可以使用它与FILE_LIST数据集合并。