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

时间:2015-02-23 04:19:11

标签: sas transpose

我的数据设置如下:

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 transpose或sql?

请注意,在上面的输入数据中,Person BBB缺少对2002-01 Var1的观察,但输出数据在最后一行返回了缺失值,即&#34;。&#34;。< / p>

1 个答案:

答案 0 :(得分:4)

使用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;