SAS转置每个组ID具有多个变量和值的长数据?

SAS tranpose long data that has multiple variables and values per group id?

我有这样设置的数据:

Pers Year Month Variable Value
AAA  2001 01    Var1     100
AAA  2001 01    Var2     200
AAA  2001 06    Var1     110
AAA  2001 06    Var2     210
AAA  2002 01    Var1     120
AAA  2002 01    Var2     .
BBB  2001 01    Var1     100
BBB  2001 01    Var2     200
BBB  2001 06    Var1     110
BBB  2001 06    Var2     210
BBB  2002 01    Var2     220

我想要这样的数据:

Pers Year Month Var1 Var2
AAA  2001 01    100  200
AAA  2001 06    110  210
AAA  2002 01    120  .
BBB  2001 01    100  200
BBB  2001 06    110  210
BBB  2002 01    .    220

我如何在 SAS 中执行此操作,最好使用 proc 转置或 sql?

请注意,在上面的输入数据中,Person BBB 缺少对 2002-01 Var1 的观察,但输出数据在最后一行返回了缺失值,即“.”。

使用 proc transpose 是显而易见的解决方案。

proc transpose data=yourdata out=yourdatat1(drop=_name_);
  by pers year month;
  id variable;
  var value;
run;

使用proc sql,你可以使用case when逻辑来总结如下数据:

proc sql;
create table yourdatat2 as
select
  pers,
  year,
  month,
  sum(case when variable = 'Var1' then value else . end) as Var1,
  sum(case when variable = 'Var2' then value else . end) as Var2
from
  yourdata
group by
  pers,
  year,
  month
;
quit;