|
/*使用分组计算完成*/
data result;
input id visit_date sport $ lps;
format visit_date yymmdd10.;
cards;
1 17665 soccer 8108
4 17348 gym 2127
4 18059 hockey 177.75
5 16352 hockey 1679
5 16460 . 27
6 15865 basket 3261
6 16568 basket 175.75
6 16889 basket 80.25
6 17205 basket 79
12 18822 soccer 3925
12 19512 basket 172.5
12 19938 basket 106.5
13 15706 base 3491
13 15743 hockey 9.25
13 16011 . 67
13 16364 . 421
14 15894 base 7065
14 16036 base 35.5
14 16199 hockey 40.75
14 16210 . 2.75
;
run;
proc sort data=result out=resultsort;
by id sport;
run;
data finalresult;
set resultsort;
by id sport;
/*visit_time:观测次数;max_time:最大的lps对应的观测次数;min_time:最小的lps对应的观测次数*/
retain visit_time max_time max_lps min_time min_lps sum_lps;
drop visit_date visit_time sum_lps;
if first.sport then
do ;
visit_time=1;max_time=1;min_time=1;max_lps=lps;min_lps=lps;sum_lps=lps;
end;
else
do;
visit_time+1;sum_lps+lps;
if max_lps<lps then do; max_lps=lps;max_time=visit_time;end;
if min_lps>lps then do; min_lps=lps;min_time=visit_time;end;
end;
if last.sport then do;avg_lps=sum_lps/visit_time;output;end;
run;
|