全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
4023 7
2009-10-19
求助各位大虾,现在有数据排列如下,
用户id     商品名称      购买数量
10001       A                   12
10002       A                     4
10002       C                   10
10003        B                    3
10003        D                   9

一共有A\B\C\D   4种商品,如何在sas中实现:将以上数据转换为如下形式
用户id      A的购买数量    B的购买数量   C的购买数量    D的购买数量
10001        12                      0                         0                      0
10002         4                       0                         10                    0
10003         0                       3                          0                     9

遇到如上问题,请各位大虾赐教,在线等,急,谢过先~!
二维码

扫码加我 拉你入群

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

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

全部回复
2009-10-19 20:31:28
Trying to use Proc Transpose to do it.
二维码

扫码加我 拉你入群

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

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

2009-10-19 22:22:41
proc transpose  ms  不行,transpose 后的列数是不相等的,这里希望它相等
二维码

扫码加我 拉你入群

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

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

2009-10-19 23:01:56
lizziezeng 发表于 2009-10-19 19:45
求助各位大虾,现在有数据排列如下,
用户id     商品名称      购买数量
10001       A                   12
10002       A                     4
10002       C                   10
10003        B                    3
10003        D                   9

一共有A\B\C\D   4种商品,如何在sas中实现:将以上数据转换为如下形式
用户id      A的购买数量    B的购买数量   C的购买数量    D的购买数量
10001        12                      0                         0                      0
10002         4                       0                         10                    0
10003         0                       3                          0                     9

遇到如上问题,请各位大虾赐教,在线等,急,谢过先~!
data a;
input x$ y$ z@;
cards;
10001       A                   12
10002       A                     4
10002       C                   10
10003        B                    3
10003        D                   9
;run;
data b;set a;
array char _CHARACTER_;
array numr _NUMERIC_ s1-s4;
Do Over char;
If char='A' Then s1=z;
If char='B' Then s2=z;
If char='C' Then s3=z;
If char='D' Then s4=z;
End;Do Over numr;if numr=. then numr=0;end;
DROP Y Z;Run;
PROC SQL;
SELECT x label='用户ID' ,sum(s1) as s1 label='A的购买数量',sum(s2) as s2 label='B的购买数量'
,sum(s3) as s3 label='C的购买数量',sum(s4) as s4 label='D的购买数量' from b group by x; quit;
二维码

扫码加我 拉你入群

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

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

2009-10-19 23:40:18
yes  实验了 就是这样的。我想到的是笨方法:先建立一个包含所有所有用户id,各用户id包含所有A/B/C/D(按列排列)的表,然后用表关联,将购买数量插进去,然后再用transpose。

以上程序中,请问下: do over  是什么意思?
二维码

扫码加我 拉你入群

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

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

2009-10-21 10:10:27
data a(drop=y z);
array name{65:68};
input x$ y$ z;
name(rank(y))=z;
rename name1=A name2=B name3=C name4=D;
cards;
10001  A   12
10002  A   4
10002  C   10
10003  B   3
10003  D   9
;
run;
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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