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