楼主: edragon1983
1460 3

[有偿编程] SAS CODE求助 [推广有奖]

  • 0关注
  • 0粉丝

已卖:1655份资源

讲师

18%

还不是VIP/贵宾

-

威望
0
论坛币
5118 个
通用积分
7.3189
学术水平
0 点
热心指数
3 点
信用等级
0 点
经验
7801 点
帖子
217
精华
0
在线时间
432 小时
注册时间
2007-8-29
最后登录
2025-7-25

楼主
edragon1983 发表于 2011-7-13 22:51:39 |AI写论文
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语句是否可行?想了半天没有想出来,盼指教!

最佳答案

pobel 查看完整内容

有点繁琐,不知是不是你想要的结果。
关键词:code COD ODE sql语句 实际数据 求助 SAS code

沙发
pobel 在职认证  发表于 2011-7-13 22:51:40
有点繁琐,不知是不是你想要的结果。
  1. data test;
  2.    input ID $ A  $ B $;
  3.     odr=_n_;
  4.    cards;
  5. 1001        a1        b1
  6. 1001        a1        b2
  7. 1001        a1        b1
  8. 1001        a1        b2
  9. 1002        a1        b1
  10. 1003        a1        b3
  11. 1004        a2        b3
  12. 1004        a2        b4
  13. 1004        a3        b3
  14. 1004        a3        b4
  15. ;

  16. proc sql;
  17.    create table test1 as
  18.     select x.a,x.b,x1
  19.              ,(x_a-x1) as x2
  20.              ,(x_b-x1) as x3
  21.             ,(N-x_a-x_b+x1) as x4
  22.             ,N
  23.          from
  24.         (select distinct a,b,count(distinct id) as N from test) as w
  25.            left join
  26.     (select distinct a,b,count(distinct id) as x_a from test group by a) as x
  27.              on w.a=x.a and w.b=x.b
  28.            left join
  29.         (select distinct a,b,count(distinct id) as x_b from test group by b) as y
  30.         on w.a=y.a and w.b=y.b
  31.        left join
  32.     (select distinct a,b,count(distinct id) as x1 from test group by a,b) as z
  33.         on w.a=z.a and w.b=z.b;
  34. quit;

  35. proc sql;
  36.    create table wanted as
  37.       select l.id, l.a,l.b,x1,x2,x3,x4,n
  38.             from test as l
  39.                  left join test1 as r
  40.          on l.a=r.a and l.b=r.b
  41.         order by odr;
  42. quit;
复制代码
已有 1 人评分经验 论坛币 学术水平 热心指数 收起 理由
crackman + 100 + 60 + 1 + 2 精彩帖子

总评分: 经验 + 100  论坛币 + 60  学术水平 + 1  热心指数 + 2   查看全部评分

和谐拯救危机

藤椅
edragon1983 发表于 2011-7-14 16:17:51
谢谢楼上!

板凳
edragon1983 发表于 2011-7-14 16:22:30
已解决,请版主给分!

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-29 02:54