我一直在研究SAS。我创建了一个虚拟数据集,如下所示:
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语句帮助我解决问题。
此致
答案 0 :(得分:1)
我认为这是您想要的,但它与您显示的OUTPUT NEEDED不匹配。你的隐秘剥削并没有帮助。
这对EXPOSURE值没有任何特殊处理。
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;
答案 1 :(得分: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 ;