w*****y 发帖数: 130 | 1 谢谢!
v1 v2 v3
a 80 99
a 78 90
b 89 910
...
按照v1等分类,找出v3每组中最大值所在的数据行,like first row for group a
thanks |
h***x 发帖数: 586 | 2 proc sort data=aaa; by v1 descending v3;
data aaa;
set aaa;
by v1 descending v3;
if first.v1;
run; |
p*****o 发帖数: 543 | 3 proc sql;
create table b as select v1,max(v3) as V3_max from a
group by v1
order by v1;
quit;
but variable v2 isn't included there.....there must be a way to include v2
there too, but i dont know how to do it in single sql step..
【在 w*****y 的大作中提到】 : 谢谢! : v1 v2 v3 : a 80 99 : a 78 90 : b 89 910 : ... : 按照v1等分类,找出v3每组中最大值所在的数据行,like first row for group a : thanks
|
D******n 发帖数: 2836 | 4 assuming your data is sorted by v1:
data _temp_;set yourdata;by v1;retain rownum 0;
if first.v1 then rownum=0;rownum=rownum+1;run;
proc sort ;by v1 descending v3;run;
data _temp_;set _temp_;by v1;if first.v1;drop v2;run;
【在 w*****y 的大作中提到】 : 谢谢! : v1 v2 v3 : a 80 99 : a 78 90 : b 89 910 : ... : 按照v1等分类,找出v3每组中最大值所在的数据行,like first row for group a : thanks
|
w*****y 发帖数: 130 | 5 thanks for your help.
in fact I want rows that has max or min,
any other ways like SQL.
meanwhile, how could i store the time when max and min as max_time min_time respectively.
Look like this
V1 max_time min_time max_v3 min_v3
a 1999 1996 99 90 |
b******e 发帖数: 539 | 6 using data step:
proc sort data=aaa; by v1 v3; run;
data bbb (drop=year v3);
retain v1 max_time min_time max_v3 min_v3;
set aaa;
by v1 v3;
retain min_time min_v3;
if first.v1 then do;
min_time = year;
min_v3 = v3;
end;
if last.v1 then do;
max_time = year;
max_v3 = v3;
output bbb;
end;
run;
the above will give you:
V1 max_time min_time max_v3 min_v3
a 1999 1996 99 90
b 89 89 910 910
if you don't want the second row in the re |
f********t 发帖数: 117 | 7 I dont use sas.
why you cant do this
select v1,
max(v3) as V3_max
min(v3) as V3_min
max(year) as year_max
min(year) as year_min from a
group by v1
order by v1;
..
select a.*, v3_max, v3_min, year..
from aaa a
left join
( select v1,
max(v3) as V3_max
min(v3) as V3_min
max(year) as year_max
min(year) as year_min from a
group by v1
) bb
on (aaa.v1 = bb.v1)
where a.v3 = bb.v3_max or
....
发信人: pepsico (pepsico), 信区: Statistics
标 题: Re: 问个简单的SAS如何找出某个变量最大之所在的行?
发信站: BBS 未名空间站 (Tue Jul 27 16:59:44 |
S******y 发帖数: 1123 | 8 #In Python
in_file = r'H:\time_min_max.txt'
f = open(in_file, 'r')
year_vec=[]
v3_vec = []
my_v1 = ''
f.next() # skip title row
print 'V1, max_time, min_time, max_v3, min_v3'
for line in f:
v1, year, v3 = line.split()
if v1 != my_v1 and my_v1 !='':
min_val = min(v3_vec)
max_val = max(v3_vec)
min_index = v3_vec.index(min_val)
max_index = v3_vec.index(max_val)
print my_v1,year_vec[max_index], year_vec[min_index], max_val, min_
val
year_vec=[] |