全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
5176 27
2010-05-28
TYPE VALUE
A    1
A    49
A    23
B    44
B    2
C    3
C    4
C    10
请教这样一个DATA SET,有没有办法只用一个DATA STEP(或者尽可能少的STEP)就增加一个VARIABLE MEAN_
DEVIATION,就是用VALUE的值,减去这个值所在的TYPE的那个组的平均值?
二维码

扫码加我 拉你入群

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

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

全部回复
2010-5-28 05:04:34
要两个吧,一个proc mean 一个data step
二维码

扫码加我 拉你入群

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

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

2010-5-28 08:15:50
data have;
        input TYPE $ VALUE;
        datalines;
A    1
A    49
A    23
B    44
B    2
C    3
C    4
C    10
;

data wanted;
    if 0 then set have;
        declare hash hh();
          hh.definekey("Type");
          hh.definedata("Type","sum","n");
          hh.definedone();
        do until(end1);
       set have end=end1;
           if hh.find()=0 then do;
              sum=sum(sum,value);
                  n+1;
                  hh.replace();
           end;
           else do;
              sum=value;
                  n=1;
          hh.add();
           end;
        end;
        do until(end2);
           set have end=end2;
           rc=hh.find();
           Mean_deviation=value-sum/n;
           output;
        end;
        keep type value mean_deviation;
        stop;
run;
二维码

扫码加我 拉你入群

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

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

2010-5-28 10:33:36
复制代码



                 The SAS System           10:29 Thursday, May 28, 2010   2

                            Obs    type    value      avg        diff

                             1      A        23     24.3333     -1.3333
                             2      A         1     24.3333    -23.3333
                             3      A        49     24.3333     24.6667
                             4      B         2     23.0000    -21.0000
                             5      B        44     23.0000     21.0000
                             6      C         4      5.6667     -1.6667
                             7      C         3      5.6667     -2.6667
                             8      C        10      5.6667      4.3333
二维码

扫码加我 拉你入群

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

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

2010-5-28 11:30:32
rockfido 发表于 2010-5-28 04:51
TYPE VALUE
A    1
A    49
A    23
B    44
B    2
C    3
C    4
C    10
请教这样一个DATA SET,有没有办法只用一个DATA STEP(或者尽可能少的STEP)就增加一个VARIABLE MEAN_
DEVIATION,就是用VALUE的值,减去这个值所在的TYPE的那个组的平均值?
You need to load data twice, one for mean calculation and one for variance calculation. Here is one in data step. However, SAS/SQL provides a much simpler solution.

data have;
        input TYPE $ VALUE;
        datalines;
A    1
A    49
A    23
B    44
B    2
C    3
C    4
C    10
;

data wanted;
do until (end);
sum=0;
do i=1 by 1 until(last.type);
    set have end=end;
    by type;
    sum+value;
    if last.type then mean=sum/i;
end;

do i=1 by 1 until(last.type);
    set have end=end;
    by type;
    var=(mean-value)**2;
   output;
end;

end;
stop;
drop sum i;
run;

proc print;run;
二维码

扫码加我 拉你入群

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

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

2010-5-28 13:11:19
我比较好奇的是为什么只能用data步.......而且要尽量少......
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…

分享

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