在SAS的data步中,可以使用by分組,在處理過(guò)程中會(huì)產(chǎn)生兩個(gè)臨時(shí)變量first.variable和last.variable,這兩個(gè)臨時(shí)變量的值不會(huì)寫到結(jié)果中,這兩個(gè)臨時(shí)變量的賦值情況如下:
由于data step是按行處理每一條觀測(cè)的,當(dāng)一條觀測(cè)為某一組的第一條記錄時(shí),那么first.variable就為1,否則為0;當(dāng)一條觀測(cè)為某一組的最后一條記錄時(shí),那么last.variable就為1,否則為0;如果某一組中只有一條觀測(cè),那么first.avriable=last.variable都為1.因此,可以使用這兩個(gè)變量來(lái)篩選每一組中的第一條或最后一條觀測(cè)。以下示例演示如何在SAS中使用first & last
考慮這樣一種場(chǎng)景:假設(shè)有某校一學(xué)期內(nèi)組織籃球比賽的數(shù)據(jù),如下所示,每一條觀測(cè)對(duì)應(yīng)一個(gè)team的一次比賽記錄,我們知道一個(gè)team在一學(xué)期內(nèi)可能會(huì)進(jìn)行多次比賽。
例1:找到每個(gè) team得分最高和最低分別對(duì)應(yīng)的進(jìn)球數(shù)
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;
第二步:創(chuàng)建臨時(shí)變量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;
結(jié)果如下:
由上圖可以看到,first變量為1表示該team得分最低所進(jìn)的球的數(shù)量,last變量為1表示該team得分最高所進(jìn)的球的數(shù)量。我們發(fā)現(xiàn),對(duì)于第一個(gè)team LLC,它的first.和last都為1,說(shuō)明這個(gè)team只進(jìn)行過(guò)一次比賽。這里需要注意的是,對(duì)于by語(yǔ)句后面的每一個(gè)變量,都會(huì)有一個(gè)對(duì)應(yīng)的first和last臨時(shí)變量,并且這些臨時(shí)變量都不會(huì)出現(xiàn)在數(shù)據(jù)集中。
例2:計(jì)算每個(gè) team進(jìn)行比賽的次數(shù)
第一步:先按team排序
proc sort data=test out=sort_test;
by team;
run;
第二步:創(chuàng)建臨時(shí)變量first和last
data test1;
set sort_test;
by team;
if first.team then
number = 0;
number + 1;
if last.team then output;
run;
結(jié)果如下:
-
LLC
+關(guān)注
關(guān)注
36文章
569瀏覽量
76918 -
SAS
+關(guān)注
關(guān)注
2文章
523瀏覽量
32905
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論