全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3019 2
2008-08-04
请教:一个指标每一个人测量了好几次,需要选择其中最相近的两次算平均数,这个怎么做?
例如
id  x
a1  2.5
a1  2.9
a1  2.2
a2  5
a2  5.1
a2  5.9
a2  5.7
就要选出a1的2.2和2.5算平均,a2的选5和5.1算平均。
我的电脑上装了sas和spss,希望哪位高手可以用这两个软件之一帮忙解决一下问题,先谢过了。

二维码

扫码加我 拉你入群

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

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

全部回复
2008-8-4 13:45:00

先写一下我的一个想法把,可能不是最好的,不过应该能完成要求

首先对数据集按id 降序x排序

proc sort data=a;
by id  descending x;
run;

然后产生一个新的数据集,每一个观测包含了测量值x,  与x相近的且小于x的测量值x1, x和x1的差dlt, x和x1的均值avg

data b;
set a;
by id;
retain x1;
if first.id then x1=x;
else do;
     dlt=sum(x1-x);
  avg=mean(x,x1);
     output;
  x1=x;
end;
run;

                                          The SAS System       

                              Obs    id     x      x1    dlt     avg

                               1     a1    2.5    2.9    0.4    2.70
                               2     a1    2.2    2.5    0.3    2.35
                               3     a2    5.7    5.9    0.2    5.80
                               4     a2    5.1    5.7    0.6    5.40
                               5     a2    5.0    5.1    0.1    5.05

最后用proc summary选取dlt最小(即最相近)的avg值

proc summary data=b nway;
class id;
var dlt;
output out=c(drop=_type_ _freq_) minid(dlt(x x1 dlt avg))=;
run;

                                          The SAS System        

                              Obs    id     x      x1    dlt     avg

                               1     a1    2.2    2.5    0.3    2.35
                               2     a2    5.0    5.1    0.1    5.05

二维码

扫码加我 拉你入群

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

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

2008-8-4 14:58:00

谢谢!不过没想明白你为什么用sum来算,我用的是绝对值abs,不过效果是一样的。

二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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