SAS proc 按组转置字符变量
SAS proc transpose by group with character variables
我有一个包含三个变量的数据。一个是 id,第二个是该 id 的观察计数,第三个是该观察的值。我想将数据从长转置到宽。问题是我收到一条错误消息,说我的分组没有按升序排序(即使是这样)。另一个问题是并不是所有的值都有相同的观察量,请看下面的例子和我正在寻找的数据结构
data have;
input id observation value;
cards;
1 1 '4.8.9'
1 2 '4.5.7'
2 1 '5.0.5'
3 1 '4.2.0'
3 2 '4.1.0'
3 3 '5.1.9';run;
data want;
input id observation1 observation2 observation3;
cards;
1 '4.8.9' '4.5.7' NA
2 '5.0.5' NA NA
3 '4.2.0' '4.1.0' '5.1.9'
;run;
/* i have tried the following:
proc transpose data=b out=c ;
by value ;
id id;
var value;
run;
proc transpose data=b out=c ;
by value ;
id id;
var observation;
run;
*/
您的 BY 变量在示例数据集中称为 ID。
您的示例数据步骤未将 VALUE 定义为字符。也不要缩进内联数据行。
您可以使用 prefix=
选项来帮助命名新变量。此外,让我们修改 ID=2 的 OBSERVATION 值,以更清楚地说明 OBSERVATION 的值如何设置变量名称,而不仅仅是 ID 组中观察值的顺序。现在值 '5.0.5'
将存储在 OBSERVATION2 中,即使它是该 ID 值的第一个观察值。
data have;
input id observation value $;
cards;
1 1 '4.8.9'
1 2 '4.5.7'
2 2 '5.0.5'
3 1 '4.2.0'
3 2 '4.1.0'
3 3 '5.1.9'
;
proc transpose data=have out=want(drop=_name_) prefix=observation;
by id;
id observation;
var value;
run;
结果:
Obs id observation1 observation2 observation3
1 1 '4.8.9' '4.5.7'
2 2 '5.0.5'
3 3 '4.2.0' '4.1.0' '5.1.9'
我有一个包含三个变量的数据。一个是 id,第二个是该 id 的观察计数,第三个是该观察的值。我想将数据从长转置到宽。问题是我收到一条错误消息,说我的分组没有按升序排序(即使是这样)。另一个问题是并不是所有的值都有相同的观察量,请看下面的例子和我正在寻找的数据结构
data have;
input id observation value;
cards;
1 1 '4.8.9'
1 2 '4.5.7'
2 1 '5.0.5'
3 1 '4.2.0'
3 2 '4.1.0'
3 3 '5.1.9';run;
data want;
input id observation1 observation2 observation3;
cards;
1 '4.8.9' '4.5.7' NA
2 '5.0.5' NA NA
3 '4.2.0' '4.1.0' '5.1.9'
;run;
/* i have tried the following:
proc transpose data=b out=c ;
by value ;
id id;
var value;
run;
proc transpose data=b out=c ;
by value ;
id id;
var observation;
run;
*/
您的 BY 变量在示例数据集中称为 ID。
您的示例数据步骤未将 VALUE 定义为字符。也不要缩进内联数据行。
您可以使用 prefix=
选项来帮助命名新变量。此外,让我们修改 ID=2 的 OBSERVATION 值,以更清楚地说明 OBSERVATION 的值如何设置变量名称,而不仅仅是 ID 组中观察值的顺序。现在值 '5.0.5'
将存储在 OBSERVATION2 中,即使它是该 ID 值的第一个观察值。
data have;
input id observation value $;
cards;
1 1 '4.8.9'
1 2 '4.5.7'
2 2 '5.0.5'
3 1 '4.2.0'
3 2 '4.1.0'
3 3 '5.1.9'
;
proc transpose data=have out=want(drop=_name_) prefix=observation;
by id;
id observation;
var value;
run;
结果:
Obs id observation1 observation2 observation3
1 1 '4.8.9' '4.5.7'
2 2 '5.0.5'
3 3 '4.2.0' '4.1.0' '5.1.9'