楼主: ck032
4764 8

[原创博文] sas sql与购物篮分析 [推广有奖]

  • 0关注
  • 2粉丝

已卖:120份资源

硕士生

83%

还不是VIP/贵宾

-

威望
0
论坛币
7 个
通用积分
0.1200
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1105 点
帖子
95
精华
0
在线时间
288 小时
注册时间
2007-10-19
最后登录
2020-5-19

楼主
ck032 发表于 2011-8-12 10:04:08 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
sas sql 怎么实现购物篮分析呢?谢谢!
二维码

扫码加我 拉你入群

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

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

关键词:sql 购物篮 购物篮

沙发
honghejing 发表于 2011-8-12 13:06:24
什么是购物篮分析?难道是每个购物篮的商品分析?

藤椅
ck032 发表于 2011-8-12 17:02:45
我有两个字段 order_id 和 product_id
每个order_id对应的product_id是不同的,如下:
order_id        product_id
1        A
1        B
1        D
2        A
2        B
3        A
3        C
3        E
3        F
4        A
4        B
5        A
5        B
5        C
5        D
5        F
5        G
我想利用sql找出与各类product_id最相关的产品,比如
A与B(出现3次)最相关、与C(2次)、D(2次)次相关
同理找出B、C、D等等product_id相关的产品。

板凳
ck032 发表于 2011-8-12 17:04:51
更正下:A出现的时候B出现的次数是4

报纸
ck032 发表于 2011-8-12 18:19:55
做到的一个中间步骤和下面的问题很类似,也是想通过sql语句实现,不知道怎么解决
两列数据
c1 c2
1 who
1 am
1 I
2 sas
2 软件
3 a
.....
转化为
1 who am I
2 sas 软件
3 a

地板
tj0412ymy 发表于 2011-8-12 18:39:15
ck032 发表于 2011-8-12 17:02
我有两个字段 order_id 和 product_id
每个order_id对应的product_id是不同的,如下:
order_id        product_i ...
  1. data test;
  2. input order_id $       product_id $;
  3. cards;
  4. 1        A
  5. 1        B
  6. 1        D
  7. 2        A
  8. 2        B
  9. 3        A
  10. 3        C
  11. 3        E
  12. 3        F
  13. 4        A
  14. 4        B
  15. 5        A
  16. 5        B
  17. 5        C
  18. 5        D
  19. 5        F
  20. 5        G
  21. ;
  22. run;

  23. options symbolgen;
  24. %macro test();
  25. proc sql noprint;
  26. create table test1 as
  27. select distinct product_id as product_id
  28. from test
  29. ;
  30. select count(*) INTO: obs
  31. from test1
  32. ;
  33. %let obs=%cmpres(&obs);
  34. select product_id into : p1 -:p&obs
  35. from test1
  36. ;
  37. quit;

  38. %do k=1 %to &obs;
  39. %do j=1 %to &obs;
  40. proc sql;
  41. create table data&j as
  42. select count(*) as &&p&k.
  43. from test as a, test as b
  44. where a.order_id=b.order_id and a.product_id="&&p&k" and b.product_id="&&p&j"
  45. ;
  46. quit;
  47. %end;

  48. data mer&k.;
  49. set %do ii=1 %to &obs; data&ii %end;;
  50. if _N_=&k. then &&p&k.=-1;
  51. run;
  52. %end;

  53. data matrix;
  54. %do jj=1 %to &obs; set mer&jj.; %end;
  55. run;

  56. data matrix1;
  57. set matrix;
  58. %do kk=1 %to &obs;
  59. if _N_=&kk. then do;
  60. _Product_="&&p&kk.";output;
  61. end;
  62. %end;
  63. run;
  64. proc print data=matrix1 noobs;
  65. var _Product_ %do ll=1 %to &obs; &&p&ll. %end;;
  66. run;
  67. %mend;
  68. %test();
复制代码


Result:

result.jpg (25.33 KB)

result.jpg

对SAS和统计方面感兴趣的朋友,请加SAS学习和认证讨论群:169157207。欢迎在群上讨论!

7
tj0412ymy 发表于 2011-8-12 18:42:13
时间所限,每列的最大值,次最大值...,可在PROC REPORT中标注不同的颜色,更美观一些,期待LXS解决!
对SAS和统计方面感兴趣的朋友,请加SAS学习和认证讨论群:169157207。欢迎在群上讨论!

8
456852 发表于 2011-8-13 04:29:26
tj0412ymy 发表于 2011-8-12 18:42
时间所限,每列的最大值,次最大值...,可在PROC REPORT中标注不同的颜色,更美观一些,期待LXS解决!
data test;
input order_id $       product_id $;
cards;
1        A
1        B
1        D
2        A
2        B
3        A
3        C
3        E
3        F
4        A
4        B
5        A
5        B
5        C
5        D
5        F
5        G
;
run;
proc sql noprint;select count(distinct product_id) into:num from test;quit;
proc sql noprint;select distinct product_id into:pro1 - :pro%left(&num) from test order by product_id;quit;
options mprint symbolgen;
%macro test();
proc sql;
%do j=1 %to #
create table temp&j as
select
%do i=1 %to #
%if &i=&j %then %do;
. as &&pro&i,
%end;
%else %do;
sum(&&pro&i) as &&pro&i,
%end;
%end;
"&&pro&j" as pro
from
(select
%do k=1 %to #
sum(case when product_id="&&pro&k" then 1 else 0 end) as &&pro&k,
%end;
order_id from test
group by order_id)
where &&pro&j>0;
%end;
run;
data final;
set
%do i=1 %to #
temp&i
%end;
;run;
%mend;
%test();
随手写了一个,仅供参考。呵呵。

9
yugao1986 发表于 2011-8-13 11:04:11
三人行必有我师

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-6 12:36