SAS 将数据转置为长格式
SAS transpose data into long form
我有以下数据集并希望将其转换为长格式:
data have ;
input Height $ Front Middle Rear ;
cards;
Low 125 185 126
Low 143 170 136
Low 150 170 129
Low 138 195 136
Low 149 162 147
Medium 141 176 128
Medium 137 161 133
Medium 145 167 148
Medium 150 165 145
Medium 130 184 141
High 129 157 149
High 141 152 137
High 148 186 138
High 130 164 126
High 137 176 138
;
run;
这里的身高分为低、中、高。位置为前、中、后。数值是按书架上一本书的位置和高度划分的价格。
我希望将数据集转换为包含列的长格式:
身高、位置和价格
以下代码只允许我将 Location 转换为长格式。如何同时转置Height?
data bookp;
set bookp;
dex = _n_;
run;
proc sort data=bookp;
by dex;
run;
proc transpose data=bookp
out=bookpLong (rename=(col1=price _name_= location )drop= _label_ dex);
var front middle rear;
by dex;
run;
我认为您只需要在 BY 语句中包含 HEIGHT。
首先让我们将您的示例数据转换为 SAS 数据集。
data have ;
input Height $ Front Middle Rear ;
cards;
Low 125 185 126
Low 143 170 136
Medium 141 176 128
Medium 137 161 133
High 129 157 149
High 141 152 137
;
现在让我们添加一个标识符来唯一标识每一行。请注意,如果您真的使用数据步骤读取数据,您可以在读取数据的同一步骤中执行此操作。
data with_id ;
row_num+1;
set have;
run;
现在我们可以转置了。
proc transpose data=with_id out=want (rename=(_name_=Location col1=Price));
by row_num height ;
var front middle rear ;
run;
结果:
Obs row_num Height Location Price
1 1 Low Front 125
2 1 Low Middle 185
3 1 Low Rear 126
4 2 Low Front 143
5 2 Low Middle 170
6 2 Low Rear 136
7 3 Medium Front 141
8 3 Medium Middle 176
9 3 Medium Rear 128
10 4 Medium Front 137
11 4 Medium Middle 161
12 4 Medium Rear 133
13 5 High Front 129
14 5 High Middle 157
15 5 High Rear 149
16 6 High Front 141
17 6 High Middle 152
18 6 High Rear 137
我有以下数据集并希望将其转换为长格式:
data have ;
input Height $ Front Middle Rear ;
cards;
Low 125 185 126
Low 143 170 136
Low 150 170 129
Low 138 195 136
Low 149 162 147
Medium 141 176 128
Medium 137 161 133
Medium 145 167 148
Medium 150 165 145
Medium 130 184 141
High 129 157 149
High 141 152 137
High 148 186 138
High 130 164 126
High 137 176 138
;
run;
这里的身高分为低、中、高。位置为前、中、后。数值是按书架上一本书的位置和高度划分的价格。
我希望将数据集转换为包含列的长格式:
身高、位置和价格
以下代码只允许我将 Location 转换为长格式。如何同时转置Height?
data bookp;
set bookp;
dex = _n_;
run;
proc sort data=bookp;
by dex;
run;
proc transpose data=bookp
out=bookpLong (rename=(col1=price _name_= location )drop= _label_ dex);
var front middle rear;
by dex;
run;
我认为您只需要在 BY 语句中包含 HEIGHT。
首先让我们将您的示例数据转换为 SAS 数据集。
data have ;
input Height $ Front Middle Rear ;
cards;
Low 125 185 126
Low 143 170 136
Medium 141 176 128
Medium 137 161 133
High 129 157 149
High 141 152 137
;
现在让我们添加一个标识符来唯一标识每一行。请注意,如果您真的使用数据步骤读取数据,您可以在读取数据的同一步骤中执行此操作。
data with_id ;
row_num+1;
set have;
run;
现在我们可以转置了。
proc transpose data=with_id out=want (rename=(_name_=Location col1=Price));
by row_num height ;
var front middle rear ;
run;
结果:
Obs row_num Height Location Price
1 1 Low Front 125
2 1 Low Middle 185
3 1 Low Rear 126
4 2 Low Front 143
5 2 Low Middle 170
6 2 Low Rear 136
7 3 Medium Front 141
8 3 Medium Middle 176
9 3 Medium Rear 128
10 4 Medium Front 137
11 4 Medium Middle 161
12 4 Medium Rear 133
13 5 High Front 129
14 5 High Middle 157
15 5 High Rear 149
16 6 High Front 141
17 6 High Middle 152
18 6 High Rear 137