在这个SAS数据步骤代码块中,我正在从名为TEST_Table的SQL查询中设置一个表。此表包含多个列,包括标题为PREFIX_1到PREFIX_20的较大部分列。每列以PREFIX_开头,然后是从1到20的递增数字。
我想要做的是迭代遍历每一列并分析该列的值。
以下是我想要的例子。正如您所看到的,我想创建一个在每次迭代时增加的变量,然后我将该计数值用作我正在检查的变量名称的一部分。
data TEST_Data;
set TEST_Table;
retain changing_number;
changing_number=1;
do while(changing_number<=20);
if PREFIX_changing_number='BAD_IDENTIFIER' then do;
PREFIX_changing_number='This is a bad part';
end;
end;
run;
在SAS中如何做到这一点最好?我知道我可以通过简单地从1到20单独检查每个值来实现。
if PREFIX_1 = 'BAD_IDENTIFIER' then do;
PREFIX_1 = 'This is a bad part';
end;
if PREFIX_2 = ...
但那真是令人讨厌,因为后来我会用一组40多个专栏来做同样的事情。
想法?
data TEST_Data;
set TEST_Table;
array SC $ SC1-SC20;
do i=1 to dim(SC);
if SC{i}='xxx' then do;
SC{i}="bad part";
end;
end;
run;
感谢您推荐Arrays:)
答案 0 :(得分:1)
您需要在SAS中查找阵列处理。简单地说,你可以这样做:
data TEST_Data;
set TEST_Table;
*retain changing_number; Remove this - even in your code it does nothing useful;
array prefixes prefix:; *one of a number of ways to do this;
changing_number=1;
do while(changing_number<=20);
if prefixes[changing_number]='BAD_IDENTIFIER' then do;
prefixes[changing_number]='This is a bad part';
end;
end;
run;
稍微好一点的循环是:
do changing_number = 1 to dim(prefixes);
... loop ...
end;
由于这一切都在一步,而且数组元素的数量很灵活(dim =数组中元素的数量)。