SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1241|回复: 4
打印 上一主题 下一主题

求教:如何在数据处理中的取最大值和其列名

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2003-10-22 14:11:06 | 只看该作者

求教:如何在数据处理中的取最大值和其列名

我现有表如下:
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'
如何编写?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2003-10-22 16:42:52 | 只看该作者
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;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2003-10-22 18:18:50 | 只看该作者

思路真巧妙啊!

vname用的真好,佩服,佩服啊!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2003-10-23 09:27:21 | 只看该作者
高人!谢谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2004-3-6 01:08:30 | 只看该作者
[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;
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-1-8 15:26 , Processed in 0.113353 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表