SAS:选择要显示的某些观察结果

时间:2014-03-07 04:06:23

标签: set sas

Obs Best _streak_ 
1 Freeburg Foxes  1 
2 Freeburg Foxes  2 
3 Freeburg Foxes  3 
4 Freeburg Foxes  4 
5 Charlotte Chipmunks  1 
6 Toronto Turtles  1 
7 Toronto Turtles  2 
8 Freeburg Foxes  1 
9 Freeburg Foxes  2 
10 Toronto Turtles  1 
...

Obs Best _streak_ 
1 Freeburg Foxes 4
2 Charlotte Chipmunks  1 
3 Toronto Turtles  2 
4 Freeburg Foxes 2 (thanks for correcting)
...

上面(第一个在上面)是我当前的SAS输出。但是,我想只显示一个团队使用团队名称一次使用 streak 的最大次数。所以我的输出看起来像第二个(或更短的输出)。

2 个答案:

答案 0 :(得分:1)

如果数据按照您指定的顺序排序,那么只需一次传递数据就可以使用NOTSORTED选项获得结果。

data have;
input best & $20. _streak_;
datalines;
Freeburg Foxes  1 
Freeburg Foxes  2 
Freeburg Foxes  3 
Freeburg Foxes  4 
Charlotte Chipmunks  1
Toronto Turtles  1 
Toronto Turtles  2 
Freeburg Foxes  1 
Freeburg Foxes  2 
Toronto Turtles  1
;
run;

data want;
set have;
by best notsorted;
if last.best;
run;

答案 1 :(得分:0)

我相信所需的输出观察4应该是:

4 Freeburg Foxes 2

? 因此,我们为每个团队的每个或有系列记录选择最大条纹,而不是绝对最大值,对吗?

然后你可以这样做,添加同一数据集的第二个实例,向上移动一行,以便能够“向前看”并确定当前记录是系列中的最后一个::

data want;
    set have;
    if not eof then do;
         set have(firstobs=2 keep=Best
                        rename=(Best=nextBest)) 
                        end=eof;
    end;
    if Best^=nextBest or eof then output;
    drop next:;
run;