data raw;
input id $ x y;
datalines;
A 1 2
A 2 3
B 1 4
B 2 5
;
run;
普通方法:
proc sql;
create table result1 as
select raw.*,
mean(x) as x_mean,
mean(y) as y_mean
from raw
group by id;
quit;
proc print; run;
文艺方法:
proc summary data=raw nway;
class id;
var x y;
output out=raw_smy(drop=_:) mean=/autoname;
run;
data result2;
retain id x y x_mean y_mean;
if _n_=1 then do;
if 0 then set raw_smy;
declare hash
ht(dataset: "raw_smy");
ht.definekey("id");
ht.definedata(all: "yes");
ht.definedone();
end;
set raw;
ht.find(key: id);
run;
proc print; run;
2B方法:
data result3;
if _n_=1 then do until (a_obs_last);
set raw(where=(id="A")) end=a_obs_last;
a_n+1;
a_x_sum+x;
a_y_sum+y;
end;
if _n_=1 then do until (b_obs_last);
set raw(where=(id="B")) end=b_obs_last;
b_n+1;
b_x_sum+x;
b_y_sum+y;
end;
set raw;
if id="A" then do;
x_mean=a_x_sum/a_n;
y_mean=a_y_sum/a_n;
end;
else if id="B" then do;
x_mean=b_x_sum/b_n;
y_mean=b_y_sum/b_n;
end;
keep id x y x_mean y_mean;
run;
proc print; run;