电子说
在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;
第二步:创建临时变量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;
结果如下:
由上图可以看到,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;
结果如下:
全部0条评论
快来发表一下你的评论吧 !