SAS 循环 - 数组

SAS Loop - Array

我有以下数据集:

data abc;
infile xyz;
input test ;
      q1 
      q2 
      .
      qn ; 

我想创建一个循环,允许检查所有这些 'q' 变量的特定条件(如果前 2 个字符不是 07 则执行),然后获取所有 'test' 变量满足那个条件。

我一直在尝试这个

data loop;
set abc;`
array q{15};`
if substri(q{15},1,2) = "07" then do;`
run;

输入看起来像这样

test     q1     q2    q3........qn
cust1   0000   0700  0800     0700
cust2   0000   0700  0800     0900
cust3   0000   0000  0800     0900
cust 4  0700   0000  0800     0900

基于我只想为前2个字符为07的情况设置测试列的条件。结果应该是

test     q1     q2    q3........qn
cust1   ----   0700  ----     0700
cust2   ----   0700  ----    ----
cust 4  0700   ----  ----     ----

假设当输入数据集中的前两个字符为 07 时,您希望在 q1-qn 中缺少值,您可以这样做:

data want;
    set have;
    array q{15} $;
    output_flag = 0;
    do i = 1 to 15;
        if q[i] eq: '07' then output_flag + 1;
        else call missing(q[i]);
    end;
    drop i;
    if output_flag then output;
run;

您几乎有了答案 - 只需按照您的 if 语句进行操作即可:

data loop;
set abc;
array q{15} $;
do i = 1 to 15;
    if substri(q{i},1,2) = "07" then do;
       q{i} = q{i};
    else
       q{i} = "";
    end;
end;
run;