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

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