当我的 id 变量多次出现时,我想知道在 SAS 中转置数据的最佳方法。我知道我可以使用 proc transpose 语句中的 let 选项来执行此操作,但我不想删除任何数据,因为我打算计算平均值。
这是我的数据和代码的示例:
data grades;
input student testnum grade;
cards;
1 1 30
1 1 25
1 2 45
1 3 67
2 1 22
2 2 63
2 2 12
2 2 77
3 1 22
3 1 17
3 2 14
3 4 17
;
run;
proc sort data=grades;
by student testnum;
run;
proc transpose data=grades out=trgrades;
by student;
id testnum;
var grade;
run;
以下是我希望生成的数据集的外观:
student testnum1 testnum2 testnum3 testnum4 avg12 avg34
1 30 45 67 . 33.33 67
1 25 . . . 33.33 67
2 22 63 . . 43.5 .
2 . 12 . . 43.5 .
2 . 77 . . 43.5 .
3 22 14 . 17 53 17
3 17 . . . 53 17
我想使用这个新数据集(还不确定如何)来创建新列,这些列是学生的所有 testnum1 和 testnum2 的平均分数(avg12)以及学生的所有 testenum3 和 testnum4 的平均值(avg34)。
可能有一种更有效的方法可以做到这一点,但我很难过。任何建议表示赞赏。