SAS:Data step中first和last变量的应用场景

电子说

1.2w人已加入

描述

在SAS的data步中,可以使用by分组,在处理过程中会产生两个临时变量first.variable和last.variable,这两个临时变量的值不会写到结果中,这两个临时变量的赋值情况如下:

由于data step是按行处理每一条观测的,当一条观测为某一组的第一条记录时,那么first.variable就为1,否则为0;当一条观测为某一组的最后一条记录时,那么last.variable就为1,否则为0;如果某一组中只有一条观测,那么first.avriable=last.variable都为1.因此,可以使用这两个变量来筛选每一组中的第一条或最后一条观测。以下示例演示如何在SAS中使用first & last

考虑这样一种场景:假设有某校一学期内组织篮球比赛的数据,如下所示,每一条观测对应一个team的一次比赛记录,我们知道一个team在一学期内可能会进行多次比赛。

例1:找到每个 team得分最高和最低分别对应的进球数

data test;

input team $ points rebounds;

  datalines;

Mavs 29 10

Mavs 13 6

Mavs 22 5

Mavs 20 9

Spurs 13 9

Spurs 15 10

Spurs 33 8

Spurs 27 11

Rockets 25 8

Rockets 14 4

Rockets 16 7

Rockets 12 4

LLC 15 9

;

run;

第一步:先按team和points排序

proc sort data=test out=sort_test;

by team points;

run;

LLC

第二步:创建临时变量first和last

data test1;

set sort_test;

by team points;

first=first.team;

  last=last.team;

  if first.team or last.team then output;

run;

结果如下:

LLC

由上图可以看到,first变量为1表示该team得分最低所进的球的数量,last变量为1表示该team得分最高所进的球的数量。我们发现,对于第一个team LLC,它的first.和last都为1,说明这个team只进行过一次比赛。这里需要注意的是,对于by语句后面的每一个变量,都会有一个对应的first和last临时变量,并且这些临时变量都不会出现在数据集中。

例2:计算每个 team进行比赛的次数

第一步:先按team排序

proc sort data=test out=sort_test;

by team;

run;

第二步:创建临时变量first和last

data test1;

set sort_test;

  by team;



  if first.team then

        number = 0;

  number + 1;

  if last.team then output;

run;

结果如下:

LLC

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分