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

时间:2018-06-06 19:14:46

标签: sas subset datastep

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

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

以上代码无效。我试图只显示其中一个arrayname列包含“x”的观察结果。

2 个答案:

答案 0 :(得分:0)

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

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

尝试使用WHICHC来过滤记录。

答案 1 :(得分:0)

它不起作用的原因是,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仅在该值为真时确定。您可以使用whichc作为Reeza指出(如果找到您要查找的值,则返回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;