我想知道在SAS中是否可以使用PROC SQL有效地从宽表转换为长表。
我知道PROC TRANSPOSE比我下面提出的方法要快得多。但我的一个目标是避免存储转置后的数据表。
举个例子,我有一个叫table1的表:
Id| A| B| C| D
_____________________
1| 100|3500|6900| 10300
2| 200| 250| 300| 350
3| 150| 32| 400| 204
4| 200| 800|1400| 2000
and i want to turn it into
id|col1| col2|
______________
1| A| 100|
1| B| 3500|
1| C| 6900|
1| D| 10300|
2| A| 200|
2| B| 250|
2| C| 300|
2| D| 350|
3| A| 150|
3| B| 32|
3| C| 400|
3| D| 204|
4| A| 200|
4| B| 800|
4| C| 1400|
4| D| 2000|
我可以这样操作: 从table1中选择id,并将'A'作为col1,A作为col2, 其中A的值不为空, 然后合并结果集 再从table1中选择id,并将'B'作为col1,B作为col2, 其中B的值不为空, 然后再次合并结果集等等。 但是这种方法效率极低。
您有什么想法吗?谢谢。
UNION
会删除任何重复项,如果您不关心是否有重复项,则可以使用UNION ALL
,这可能有助于提高性能。 - Taryn