找到列标题包含特定关键字的第一行

问题描述 投票:0回答:1

我在一个文件夹中保存了多个 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;

可能有一些屏幕截图和其他不需要的信息。我只想导入列标题和数据。

sas sas-macro
1个回答
0
投票

_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;
© www.soinside.com 2019 - 2024. All rights reserved.