SAS利用data步实现数据集的行列互换

标签:
杂谈 |
分类: SAS编程及应用 |
http://s16/mw690/9d0b00a4gd450ca331fdf&690
一: 如果要把列转成行,则DO循环独立于set语句,同时使用output语句.保证程序每读入一条观测,通过DO循环和output 语句输出多条观测。
二: 如果需要把行转成列,则DO循环包含set语句,同时不使用output语句,程序在DO循环中把循环次数对应读入的观测条数值赋值给不同的列变量,最后通过run语句输出。
例如:
Location | Date | Length1 | Weight1 | Length2 | Weight2 | Length3 | Weight3 | Length4 | Weight4 |
Cole Pond | 2-Jun-95 | 31 | 0.25 | 32 | 0.3 | 32 | 0.25 | 33 | 0.3 |
Cole Pond | 3-Jul-95 | 33 | 0.32 | 34 | 0.41 | 37 | 0.48 | 32 | 0.28 |
Cole Pond | 4-Aug-95 | 29 | 0.23 | 30 | 0.25 | 34 | 0.47 | 32 | 0.3 |
Eagle Lake | 2-Jun-95 | 32 | 0.35 | 32 | 0.25 | 33 | 0.3 | . | . |
Eagle Lake | 3-Jul-95 | 30 | 0.2 | 36 | 0.45 | . | . | . | . |
Eagle Lake | 4-Aug-95 | 33 | 0.3 | 33 | 0.28 | 34 | 0.42 | . | . |
该数据集为fishdata.是科尔池塘和鹰湖中鱼的长度和重量数据。
程序如下:
http://s14/mw690/9d0b00a4gd450cb51ea6d&690
http://s15/mw690/9d0b00a4gd450cb694f9e&690
备注: 在商业实践中,应当避免使用transpose 过程,特别是在大数据集的情况下,transpose过程会非常耗时间。而transpose本质上是在程序后台运行的data步,所以完全可以用自已开发的data步代码取而代之,相对于transpose,data步的运行速度会非常快。