SAS - 从具有相同ID但状态不同的多个记录中进行选择

时间:2013-06-03 08:20:02

标签: sql sas proc-sql datastep

对于误导性(如果有)问题标题感到抱歉,因为我不知道如何在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获得上述结果?我们非常感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

为此,您可以使用NOT IN子句,如下所示 -

SELECT DISTINCT Userid
  FROM Your_Table_Name
 WHERE Userid NOT IN
       (SELECT Userid FROM Your_Table_Name WHERE Status = 'completed')

答案 1 :(得分: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;