2016-01-18 43 views
0

我一直在研究SAS。我創建了一個虛擬數據集如下:如何使用SAS中的PROC MEANS找到列中的第二大數字?

data try1; 
infile datalines; 
length Level $ 10; 
input Variable $ Level $ Exposure; 
datalines; 
A A1 100 
A A2 200 
A A3 300 
A Unknown 1000 
B B1 70 
B B2 20 
B B3 30 
B B4 40 
B Unknown 100 
C C1 200 
C C2 100 
C C3 80 
C Unknown 50 
; 
Run; 

後創建一個數據集的成功完成,現在我試圖找出每類「變量」的人數最多,這已經完成由PROC MEANS程序。代碼相同如下:

proc means data=try1 noprint; 
Class Variable; 
id Level; 
var Exposure; 
output out = try2 (drop = Level _TYPE_ _FREQ_) 
maxid(Exposure(Level)) = max_factor 
max=; 
run; 

我能夠得到正確的輸出相同。但現在我想知道在每一類「變量」的第二大數字,當然我需要一個像這樣的輸出:

Max_Exposure Sec_Max_Exposure Output 
    Unknown   A3    A3 
    Unknown   B1    B1 
    C1    C2    C1 

基本上我需要消除未知「級別」,這樣我可以得到想要的輸出列。

任何人都可以幫助我解決使用PROC MEANS語句的問題。

問候

+1

這是爲什麼標籤R' – MLavoie

+0

我打算在R上也做同樣的事情。 –

回答

0

你可以做一個單一的datastep ...

 
data want ; 
    set have ; 
    by Variable ; 

    length maxid1 maxid2 $10. 
    retain max1 max2 . maxid1 maxid2 '' ; 

    if first.Variable then call missing(of max:) ; 

    if Exposure > max1 then do ; 
    max2 = max1 ; 
    maxid2 = maxid1 ; 
    max1 = Exposure ; 
    maxid1 = Level ; 
    end ; 

    if last.Variable then output ; 
run ; 
1

我想這是你想要的,但它不匹配輸出需要的告訴你。你是神祕的剝削並沒有幫助。

這並沒有任何特殊的曝光值綁定。

data try1; 
infile datalines; 
length Level $ 10; 
input Variable $ Level $ Exposure; 
datalines; 
A A1 100 
A A2 200 
A A3 300 
A Unknown 1000 
B B1 70 
B B2 20 
B B3 30 
B B4 40 
B Unknown 100 
C C1 200 
C C2 100 
C C3 80 
C Unknown 50 
; 
Run; 
proc print; 
    run; 
proc summary data=try1 nway; 
    where level ne: 'Unk'; 
    class variable; 
    output out=max2(drop=_type_) 
     idgroup(max(exposure) out[2](exposure level)=); 
    run; 
proc print; 
    run; 

enter image description here