全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2788 3
2016-12-10
各位大神,我想计算在每个组号内,差异小于30%的组,求助~!如下所示,第3组的两个数据差值比率=(38573.22-30330.71)/30330.71=27.18%,输出3

组号

均数

3

30330.71

3

38573.22

4

18903.86

4

29965.84

5

10988.00

5

22843.31

6

6631.87

6

10502.51

6

16536.48



二维码

扫码加我 拉你入群

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

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

全部回复
2016-12-12 03:15:00
你举的例子组3,刚好只有2个数。我的理解你是要求任何一组内的最大数和最小数的差值比率,是吗?

以你的数据为例:

首先,proc sort 排序,求出 first.group (最小)和 last.group(最大):

data test1;
input group $  amount 8.2;
cards;
3 30330.71
3 38573.22
4 18903.86
4 29965.84
5 10988.00
5 22843.31
6 6631.87
6 10502.51
6 16536.48
;
proc sort;
by group amount;
run;

data test2;
set test1;
by group;
if first.group or last.group ;
run;

之后的处理其实有两种选择,都需要用到 lag 语句,以便把first.group (充当分母)的值 “移到” 和 last.group 同一行:

option 1,

data test3;
set test2;
by group;
XXX = (amount-lag(amount))/lag(amount);
if last.group and XXX LT 0.3 then output = 3;
drop XXX;
run;

option 2 (另外,要用到 dif 语句),

data test4;
set test2;
by group;
YYY = dif(amount) / lag(amount);
if last.group and YYY LT 0.3 then output = 3;
drop YYY;
run;

           Obs    group     amount     output
           1       3      30330.71       .
           2       3      38573.22       3
           3       4      18903.86       .
           4       4      29965.84       .
           5       5      10988.00       .
           6       5      22843.31       .
           7       6       6631.87       .
           8       6      16536.48       .



二维码

扫码加我 拉你入群

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

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

2016-12-26 06:22:12
赞一个!!!!!!!!!
二维码

扫码加我 拉你入群

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

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

2016-12-29 06:44:04
mich_ard 发表于 2016-12-12 03:15
你举的例子组3,刚好只有2个数。我的理解你是要求任何一组内的最大数和最小数的差值比率,是吗?

以你的 ...
做了一点修改。
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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