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'