我在一个文件夹中保存了多个 Excel 文件,每个文件仅包含一张带有随机命名的工作表选项卡的工作表。我需要找到包含列标题“作业编号”的第一行。并导入从每个文件的列标题开始的所有数据。每个文件中有 11 列和随机行。
下面是我的代码,用于处理单个 Excel 文件以识别包含“作业编号”的行。但是,我在 do i = 1 to dim(cols); 行上遇到错误也就是说,
错误:循环变量不能是数组名或字符变量;它必须是标量数字。
有人可以帮助我更正代码并使其适用于多个文件吗?谢谢!
%let folder = /mnt;
%let filename = file.xlsx;
proc import datafile="&folder./&filename."
out=raw_data
dbms=xlsx
replace;
getnames=no;
run;
data _null_;
set raw_data;
array cols _all_;
if _n_ = 1 then do;
found = 0;
do i = 1 to dim(cols);
if upcase(vname(cols[i])) = "JOB NO." then do;
call symputx('header_row', _n_);
found = 1;
leave;
end;
end;
if found = 0 then do;
put "ERROR: 'Job No.' not found in the first row.";
call symputx('header_row', 0);
end;
end;
run;
data final_data;
set raw_data(firstobs=&header_row);
run;
data final_data;
set final_data;
if _n_ = 1 then do;
rename
col1 = Job_No
col2 = Requesting_Client
col3 = Contact_Full_Name
col4 = Start_time
col5 = End_Time
col6 = Language
/* there are more columns */
;
end;
run;
proc print data=final_data;
run;
可能有一些屏幕截图和其他不需要的信息。我只想导入列标题和数据。
_all_
在 sas 数组中无效。您需要独立循环字符和数字。
data new_dataset;
set existing_dataset;
/* Define an array that includes all numeric variables */
array num_vars _numeric_;
/* Optionally, define an array for character variables */
array char_vars _character_;
/* Example operation: increment all numeric variables by 1 */
do i = 1 to dim(num_vars);
num_vars[i] = num_vars[i] + 1;
end;
/* Example operation: concatenate '-updated' to all character variables */
do i = 1 to dim(char_vars);
char_vars[i] = catx(' ', char_vars[i], '-updated');
end;
drop i; /* Remove the index variable from the output dataset */
run;