SAS — выбор из нескольких записей с одинаковым идентификатором, но разным статусом

Извините за вводящее в заблуждение (если есть) название вопроса, так как я не знаю, как выразить то, что мне нужно, в 1 вопросе.

У меня есть набор данных, как показано ниже:

UserId    Order    Status
1         1        completed
1         2        completed
1         3        incompleted
2         1        incompleted
2         2        incompleted

Я хочу выбрать тех пользователей, у которых нет завершенного статуса, например, с приведенным выше набором данных результат, который я получу, будет

UserId
2

Есть ли способ получить вышеуказанный результат с помощью SAS datastep или PROC SQL? Помощь приветствуется и заранее благодарна.


person Luke Henz    schedule 03.06.2013    source источник


Ответы (2)


Вот подход с шагом данных, сортировка proc не потребуется, если ваши данные уже отсортированы.

data have;
input UserId Order Status :$11.;
datalines;
1         1        completed
1         2        completed
1         3        incompleted
2         1        incompleted
2         2        incompleted
;
run;

proc sort data=have;
by userid order;
run;

data want (keep=userid);
set have;
by userid;
if first.userid then num_complete=0;
num_complete+(status='completed');
if last.userid and num_complete=0 then output;
run;
person Longfish    schedule 03.06.2013
comment
Привет, Кит, спасибо за ответ. Я использовал его, и возникла небольшая проблема, если переменная состояния имеет более 2 значений, то можем ли мы по-прежнему делать это таким образом? Например, статус имеет еще 1 значение неизвестно. Заранее спасибо. - person Luke Henz; 10.06.2013
comment
Итак, вы хотите подсчитать количество неизвестных? - person Longfish; 10.06.2013
comment
извините за поздний ответ, но я разобрался. Еще раз спасибо за ваш ответ. Ваш код мне очень помог. - person Luke Henz; 17.06.2013

Для этого вы можете использовать предложение NOT IN, как показано ниже:

SELECT DISTINCT Userid
  FROM Your_Table_Name
 WHERE Userid NOT IN
       (SELECT Userid FROM Your_Table_Name WHERE Status = 'completed')
person pratik garg    schedule 03.06.2013