根据某些条件从多个obs中选择一个obs

Selecting one obs from multiple ones based on some conditions

我有一个包含多行帐户的数据集。 我想根据一些过滤条件每人保留一个。 数据集是

Account Model Class Value
1         A     0     1.0
1         B     0     1.0
2         B     0     0.5
3         A     1     0.5
3         A     0     1.0

我想根据这些条件为每个帐户保留一行:

预期输出为

Account Model Class Value
    1         A     0     1.0
    2         B     0     0.5
    3         A     1     0.5

代码在SAS中实现。 我的想法是为那些有多行的帐户分配一个值,并且 select 只为那些满足上述条件的帐户分配一个值。 但是我不知道如何 select 只有一行的帐户。 我认为我只能看一下 max Class,因为它会 select 而不管模型(通常 Class 是与模型 A 相关的最高值)。

假设Class的最大值为1,你可以根据自己的条件对数据进行排序,输出第一个。

data have;
infile datalines;
input Account Model $ Class Value;
datalines4;;;;
1 A 0 1.0
1 B 0 1.0
2 B 0 0.5
3 A 1 0.5
3 A 0 1.0
;;;;
run;

proc sort out=stage1 data=have; by account model descending class;run;

data want;
   set stage1;
   by account model descending class;
   if first.account then output;
run;

但是我不知道如何select只有一行的帐户。

您可以将 first.last. 数据步骤变量用于 select 只出现一次的帐户。确实if first.account and last.account那么说明by组中只有一个观察

基本上,第一个。为 by 组中的第一个观测值分配值 1,为 by 组中的所有其他观测值分配值零。请记住,在您的特定情况下,数据需要在应用 FIRST 之前按帐户排序。变量。