根据某些条件从多个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
我想根据这些条件为每个帐户保留一行:
- 如果一个帐户只有一行,则保留它,而不考虑class和模型。
- 如果一个帐户有多行,则保留具有模型 A 和 Class = 1 或具有模型 A 和 Class 的帐户。
预期输出为
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 之前按帐户排序。变量。
我有一个包含多行帐户的数据集。 我想根据一些过滤条件每人保留一个。 数据集是
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
我想根据这些条件为每个帐户保留一行:
- 如果一个帐户只有一行,则保留它,而不考虑class和模型。
- 如果一个帐户有多行,则保留具有模型 A 和 Class = 1 或具有模型 A 和 Class 的帐户。
预期输出为
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 之前按帐户排序。变量。