SAS中文论坛

标题: 求助---长表转宽表的问题 [打印本页]

作者: shiyiming    时间: 2005-11-23 11:32
标题: 求助---长表转宽表的问题
我有一张表格式如下:
id,prod
1000,11
1000,13
1000,34
1001,11
1001,23
……
已知该表中一个id最多有10条记录,现在希望按照id和prod升序排列后把上表转化成下表格式:
id,prod1,prod2,prod3,prod4,……prod9,prod10
1000,11,13,34
1001,11,23
……

请教各位有什么比较高效的算法,长表记录数2000多万条,我在笔记本电脑上运算:(

多谢
作者: shiyiming    时间: 2005-11-23 15:27
标题: Solution to your problem!!
data one;
input id $ prod @@;
cards;
1000         11
1000         13
1000         34
1000        16
1000        43
1000        24
1000        64
1001        34
1001        54
1001        34
1001        32
1001         11
1001         23
1002        16
1002        22
1002        24
1002        23
1002        34
1002        43
1002        34
1002        24
1003        16
1003        22
1003        24
1003        23
1003        34
1003        43
1003        34
1003        24
1003        66
1003        765
1004        16
1004        22
1004        24
1005        16
1005        22
1005        24
1005        23
1005        34
1005        43
1005        34
1005        24
1005        66
1005        765
;
proc transpose out=two (drop=_Name_) prefix=prod;
by id;
var prod;
proc print;
run;


建议:先用EXCELl输入数据,然后将其拷贝过来即可。
作者: shiyiming    时间: 2005-11-23 16:17
标题: 再问一个问题
谢谢homestay
早就听说过transpose功能很强大,可惜一直没去用它,可惜。

再变换一下,看看这个问题如何解决?
原数据:
id,prod,fee
1000,12,23.3
1000,13,34.5
1001,13,45.6
1001,23,36.8
……
希望转换为:
id,prod_12,prod_12_fee,prod_13,prod_13_fee,prod_23,prod_23_fee……
1000,1,23.3,1,34.5,0,0……
1001,0,0,1,45.6,1,36.8……
……
其中prod_12取值0/1,表示该id是否有prod 取值为12的纪录,prod_12_fee则代表prod取值为12对应的fee取值。




欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2