全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1633 3
2011-07-13
悬赏 50 个论坛币 已解决
目前遇到一个问题,想不到办法解决,请教高手指点。原始数据量比较大(几万条记录),我举一个简单例子
ID        A        B
1001        a1        b1
1001        a1        b2
1001        a1        b1
1001        a1        b2
1002        a1        b1
1003        a1        b3
1004        a2        b3
1004        a2        b4
1004        a3        b3
1004        a3        b4


对于这样的数据,ID为交易记录号,本例中为4条。现在想得到如下数据,以a1,b1组合为例:x1为4条记录中含有a1,b1的组合数(2条),x2为4条记录中含有a1,但是不含有b1的组合数(1条),x3为4条记录中含有b1,但是不含有a1的组合数(0条),x2为4条记录中不含有a1且不含有b1的组合数(1条),x1+x2+x3+x4总和为4。拓展至其他组合,结果如下:

ID        A        B        x1        x2        x3        x4        N
1001        a1        b1        2        1        0        1        4
1001        a1        b2        1        1        0        2        4
1001        a1        b1        2        1        0        1        4
1001        a1        b2        1        1        0        2        4
1002        a1        b1        2        1        0        1        4
1003        a1        b3        1        2        1        0        4
1004        a2        b3        1        1        1        1        4
1004        a2        b4        1        1        0        2        4
1004        a3        b3        1        0        1        2        4
1004        a3        b4        1        0        0        3        4

以上只是一个简单举例  实际数据A与B均为中文,并无规律性可言(并非按a,b字母开头)

请教如何实现以上预期结果?SQL语句是否可行?想了半天没有想出来,盼指教!

最佳答案

ntsean 查看完整内容

data test; input ID $ A $ B $; datalines; 1001 a1 b1 1001 a1 b2 1001 a1 b1 1001 a1 b2 1002 a1 b1 1003 a1 b3 1004 a2 b3 1004 a2 b4 1004 a3 b3 1004 a3 b4 ; run; proc sql; select a.*, (select sum(mA*mB) from (select id as mid, max ...
二维码

扫码加我 拉你入群

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

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

全部回复
2011-7-13 22:47:36
data test;
input ID $        A $        B $;
datalines;
1001        a1        b1
1001        a1        b2
1001        a1        b1
1001        a1        b2
1002        a1        b1
1003        a1        b3
1004        a2        b3
1004        a2        b4
1004        a3        b3
1004        a3        b4
;
run;

proc sql;
select a.*,
(select sum(mA*mB) from (select id as mid, max(A=a.A) as mA, max(B=a.B) as mB from test group by id)) as x1,
(select sum(mA*(1-mB)) from (select id as mid, max(A=a.A) as mA, max(B=a.B) as mB from test group by id)) as x2,
(select sum((1-mA)*mB) from (select id as mid, max(A=a.A) as mA, max(B=a.B) as mB from test group by id)) as x3,
(select sum((1-mA)*(1-mB)) from (select id as mid, max(A=a.A) as mA, max(B=a.B) as mB from test group by id)) as x4,
calculated x1+calculated x2+ calculated x3+ calculated x4 as N
from test as a
;


quit;
二维码

扫码加我 拉你入群

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

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

2011-7-14 08:46:41
是否还需要有变量来判断有a1但无b2之类的
所有分类的依据是什么?每个ID的第一条记录的a1,b1取值,还是所有水平数,即针对一个ID对于A有m个水平,B有n个水平,需要有2^m*2^n个变量来记录?
二维码

扫码加我 拉你入群

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

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

2011-7-14 16:21:49
3# ntsean

谢谢!
已解决,请版主给分!
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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