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

-
LLC
+關注
關注
38文章
628瀏覽量
80678 -
SAS
+關注
關注
2文章
524瀏覽量
34097
發(fā)布評論請先 登錄
AG32VF-MIPI應用場景
實時示波器的技術原理和應用場景
敏捷合成器的技術原理和應用場景
Switch的應用場景
MOS管的應用場景
E4360 SAS瞬態(tài)部分不響應某些SCPI命令
this的使用場景及與C,Java中的this的區(qū)別
PCIExpress SATA和SAS設計驗證的簡化
volatile關鍵字應用場景及示例
消息隊列的5個常見應用場景
請教一下編譯報錯no section to be FIRST/LAST是什么原因呢?
JAVA的堆和棧介紹和內(nèi)存機制中堆和棧的區(qū)別及變量在內(nèi)存中的分配
SAS:Data step中first和last變量的應用場景
評論