如何在数据步骤(SAS)中使用数组对数据子集?

如何在数据步骤(SAS)中使用数组对数据子集?,sas,subset,datastep,Sas,Subset,Datastep,上面的代码不起作用。我试图只显示其中一个arrayname列包含“x”的观察结果 尝试使用WHICHC来过滤记录 它不起作用的原因是,如果遇到false值,则子集if将立即返回,而不会继续处理。这相当于: DATA output; SET arbitrary_table; ARRAY arrayname $ arrayname_1 - arrayname_10; if whichc('x', of arrayname(*)); RUN; 您需要做的是识别任何值是否为真

上面的代码不起作用。我试图只显示其中一个arrayname列包含“x”的观察结果


尝试使用WHICHC来过滤记录

它不起作用的原因是,如果遇到
false
值,则子集
if
将立即
返回
,而不会继续处理。这相当于:

DATA output;
    SET arbitrary_table;
    ARRAY arrayname $ arrayname_1 - arrayname_10;

    if whichc('x', of arrayname(*));
RUN;
您需要做的是识别任何值是否为真,并且仅当该值为真时才识别
if
。您可以使用Reeza指出的
(如果找到您要查找的值,则返回真值;如果找不到,则返回假值);或者您可以以类似的方式进行迭代,如下所示:

DATA output;
    SET arbitrary_table;
    ARRAY arrayname $ arrayname_1 - arrayname_10;

    DO i = 1 TO 10;
        IF arrayname(i) ne "x" then delete; 
    END;
RUN;
DATA output;
    SET arbitrary_table;
    ARRAY arrayname $ arrayname_1 - arrayname_10;

    DO i = 1 TO 10;
        IF arrayname(i) ne "x" then delete; 
    END;
RUN;
DATA output;
    SET arbitrary_table;
    ARRAY arrayname $ arrayname_1 - arrayname_10;
    has_x=0;
    DO i = 1 TO 10;
        IF arrayname(i) = "x" then has_x=1;
    END;
    if has_x;
RUN;