SAS中文论坛

标题: 求教:如何在数据处理中的取最大值和其列名 [打印本页]

作者: shiyiming    时间: 2003-10-22 14:11
标题: 求教:如何在数据处理中的取最大值和其列名
我现有表如下:
V1 V2 V3
1 2 3
1 4 3
5 2 4
我想要生成第4个变量max_col=‘每行中最大的那个值_最大的那个值所在的列名’。即:
V1 V2 V3 max_col
1 2 3 '3_V3'
1 4 3 '4_V2'
5 2 4 '5_V1'
如何编写?
作者: shiyiming    时间: 2003-10-22 16:42
data tem;
input V1 V2 V3;
cards;
1 2 3
1 4 3
5 2 4
;run;

data tem;
set tem;
_tem=max(of v1-v3);
array arr v1-v3;
do over arr;
        if arr=_tem then V4=_tem||'_'||vname(arr);
end;
drop _tem;
run;
proc print;run;
作者: shiyiming    时间: 2003-10-22 18:18
标题: 思路真巧妙啊!
vname用的真好,佩服,佩服啊!
作者: shiyiming    时间: 2003-10-23 09:27
高人!谢谢!
作者: shiyiming    时间: 2004-3-6 01:08
[quote="willon":1d709]data tem;
input V1 V2 V3;
cards;
1 2 3
1 4 3
5 2 4
;run;

data tem;
set tem;
_tem=max(of v1-v3);
array arr v1-v3;
do over arr;
        if arr=_tem then V4=_tem||'_'||vname(arr);
end;
drop _tem;
run;
proc print;run;[/quote:1d709]

逻辑很干净利落。

小小建议:其实_tem=max(of v1-v3) 和后面的逻辑导致了重复扫描数组,如果只是求最值,不妨直接求,只需扫描一遍数组:
data tem(keep=v1-v4);
set tem;
array arr v1-v3;
winner = 1;
win_val = arr(1);
do i=2 to dim(arr);
        if win_val<arr(i) then do;
                winner = i;
                win_val= arr(i);
        end;
end;
v4 = win_val||'_'||vname(arr(winner));
run;




欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2