Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SAS传输每个组id具有多个变量和值的长数据?_Sas_Transpose - Fatal编程技术网

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。