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;
我有以下数据集:
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;