0

抱歉,问题标题具有误导性(如果有),因为我不知道如何在 1 个问题中表达我需要的内容。

我有一个数据集如下:

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

我想选择那些没有完成状态的用户,例如,使用上面的数据集,我得到的结果是

UserId
2

无论如何可以使用 SAS 数据步或 PROC SQL 获得上述结果吗?帮助表示赞赏,并提前感谢。

4

2 回答 2

3

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

SELECT DISTINCT Userid
  FROM Your_Table_Name
 WHERE Userid NOT IN
       (SELECT Userid FROM Your_Table_Name WHERE Status = 'completed')
于 2013-06-03T08:54:40.190 回答
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;
于 2013-06-03T11:19:14.593 回答