楼主: lizziezeng
4063 7

[原创博文] 【求助】如何将按列形式排列的数据转换为按行形式排列?(急急) [推广有奖]

  • 0关注
  • 0粉丝

本科生

6%

还不是VIP/贵宾

-

威望
0
论坛币
360 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
878 点
帖子
53
精华
0
在线时间
54 小时
注册时间
2008-8-2
最后登录
2017-6-18

楼主
lizziezeng 发表于 2009-10-19 19:45:22 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
求助各位大虾,现在有数据排列如下,
用户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

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

扫码加我 拉你入群

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

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

关键词:数据转换 商品名称 商品名 在线等 谢过先 如何 用户

回帖推荐

xiaosanmao 发表于4楼  查看完整内容

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 ...

本帖被以下文库推荐

沙发
CRQ 发表于 2009-10-19 20:31:28
Trying to use Proc Transpose to do it.

藤椅
lizziezeng 发表于 2009-10-19 22:22:41
proc transpose  ms  不行,transpose 后的列数是不相等的,这里希望它相等

板凳
xiaosanmao 发表于 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;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

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

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

地板
david0 发表于 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;

7
bobguy 发表于 2009-10-25 03:54:52
I believe you want a report type table.

SAS tabulate provide such a report. BTW the data transposes into that sharp is very inefficient.

Here is an example of how tabulate works.

data t1;
length brand $2;
input id brand   num;
cards;
10001       A                   12
10002       A                     4
10002       C                   10
10003        B                    3
10003        D                   9
;
proc format;
value nn
.=0
other=[8.]
;
run;

proc tabulate data=t1;
class id brand;
var num;
table id, brand=' '*num=' '*sum=' '*f=nn.;
run;

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

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