在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;
結果如下:
-
LLC
+關注
關注
36文章
552瀏覽量
76457 -
SAS
+關注
關注
2文章
517瀏覽量
32770
發布評論請先 登錄
相關推薦
評論