SAS传输每个组id具有多个变量和值的长数据?
我有如下设置的数据:SAS传输每个组id具有多个变量和值的长数据?,sas,transpose,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 20
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
我希望数据如下所示:
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;
使用
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;
当然你可以通过在线查看
proc transpose
示例来解决这个问题?谢谢你的建设性贡献@Keith。当然你可以通过在线查看proc transpose
示例来解决这个问题?谢谢你的建设性贡献@Keith。