SAS 使用计数识别两个变量的组合
SAS identify combinations of two variables using count
我有以下数据集
data input;
input Row$ A B;
datalines;
1 1 2
2 1 2
3 1 1
4 1 1
5 2 3
6 2 3
7 2 3
8 2 2
9 2 2
10 2 1
;
run;
我的目标只是保留变量 A 的第一组数据的记录。例如,我只想要记录 A=1 和 B=2(第 1 行和第 2 行)以及下一组 A =2 和 B=3 等等...
我尝试了以下代码
data input (rename= (count=rank_b));
set input;
count + 1;
by A descending B;
if first.B then count = 1;
run;
这只是给出了 A(1 到 4)和 B(1 到 6)中的观察数。我想要的是
A B rank_b rank_b_desired
1 2 1 1
1 2 2 1
1 1 1 2
1 1 2 2
2 3 1 1
2 3 2 1
2 2 1 2
2 2 2 2
2 1 1 3
这样我就可以消除所有 rank_b_desired 不等于 1 的对象。
遇到A的新值时将标志设置为1,如果B发生变化则将其设置为0。 retain
将在从输入中读取新行时保留标志的值。
data want;
set input;
by A descending B;
retain flag;
if first.B then flag = 0;
if first.A then flag = 1;
run;
也可以通过 proc sql
获得所需的结果,另外的好处是它不依赖于预先排序的数据。
proc sql;
create table want as
select *
from input
group by A
having B = max(B)
order by Row;
quit;
或者匹配 user234821 的输出:
proc sql;
create table want as
select
*,
ifn(B = max(B), 1, 0) as flag
from input
group by A
order by Row;
quit;
我有以下数据集
data input;
input Row$ A B;
datalines;
1 1 2
2 1 2
3 1 1
4 1 1
5 2 3
6 2 3
7 2 3
8 2 2
9 2 2
10 2 1
;
run;
我的目标只是保留变量 A 的第一组数据的记录。例如,我只想要记录 A=1 和 B=2(第 1 行和第 2 行)以及下一组 A =2 和 B=3 等等...
我尝试了以下代码
data input (rename= (count=rank_b));
set input;
count + 1;
by A descending B;
if first.B then count = 1;
run;
这只是给出了 A(1 到 4)和 B(1 到 6)中的观察数。我想要的是
A B rank_b rank_b_desired
1 2 1 1
1 2 2 1
1 1 1 2
1 1 2 2
2 3 1 1
2 3 2 1
2 2 1 2
2 2 2 2
2 1 1 3
这样我就可以消除所有 rank_b_desired 不等于 1 的对象。
遇到A的新值时将标志设置为1,如果B发生变化则将其设置为0。 retain
将在从输入中读取新行时保留标志的值。
data want;
set input;
by A descending B;
retain flag;
if first.B then flag = 0;
if first.A then flag = 1;
run;
也可以通过 proc sql
获得所需的结果,另外的好处是它不依赖于预先排序的数据。
proc sql;
create table want as
select *
from input
group by A
having B = max(B)
order by Row;
quit;
或者匹配 user234821 的输出:
proc sql;
create table want as
select
*,
ifn(B = max(B), 1, 0) as flag
from input
group by A
order by Row;
quit;