如何在 DATA STEP (SAS) 中使用数组对数据进行子集化?

How do I subset data with arrays in DATA STEP (SAS)?

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

    DO i = 1 TO 10;
        IF arrayname(i) = "x";
    END;
RUN;

以上代码无效。我试图只显示其中一个 arrayname 列包含 "x".

的观察结果
DATA output;
    SET arbitrary_table;
    ARRAY arrayname $ arrayname_1 - arrayname_10;

    if whichc('x', of arrayname(*));
RUN;

尝试使用 WHICHC 来过滤记录。

它不起作用的原因是子集 if 将立即 return 而不是在遇到 false 值时继续处理。这相当于:

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;

您需要做的是确定 任何 值是否为真,并且 if 仅当该值为真时。您可以像 Reeza 指出的那样使用 whichc(如果找到您要查找的值,则 returns 为 TRUE 值,否则为 FALSE);或者你可以像这样以类似的方式迭代:

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;