Как мне поместить данные с массивами в DATA STEP (SAS)? - PullRequest
0 голосов
/ 06 июня 2018
DATA output;
    SET arbitrary_table;
    ARRAY arrayname $ arrayname_1 - arrayname_10;

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

Приведенный выше код не будет работать.Я пытаюсь показать только наблюдения, где один из столбцов массива содержит «x».

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Причина, по которой он не работает, состоит в том, что подмножество 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;
0 голосов
/ 06 июня 2018
DATA output;
    SET arbitrary_table;
    ARRAY arrayname $ arrayname_1 - arrayname_10;

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

Попробуйте вместо этого использовать WHICHC для фильтрации записи.

...