全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
7597 2
2012-01-21
我的数据

A  1  2
A  2  3
B  1  4
B  2  5
.
.
.
我想根据第一列变量分组求均值,然后赋值到每行后面。如何实现?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2012-1-21 03:31:10
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;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-4-25 21:22:52
感谢二楼~
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群