在 SAS 中使用 Proc 将宽转长

问题描述 投票:0回答:1

我的数据如下表所示,我想将其转置,就像在 excel 中使用数据透视表一样,但在 SAS 中。我尝试过 proc 转置,但收到“错误:ID 值“'**'n”在同一个 BY 组中出现两次。”

有(称之为长):

班级 年份 Dev_Qtr 付费_损失 公司_损失
A 段 2004年 3 1000000 1500000
A 段 2004年 6 950547 1425820.5
A 段 2004年 9 971746 1457619
A 段 2004年 15 912356 1368534
A 段 2004年 18 26916 40374
A 段 2004年 21 235696 353544
A 段 2004年 27 641805 962707.5
A 段 2004年 30 653554 980331
B 段 2004年 3 1000000 1500000
B 段 2004年 6 634698 952047
B 段 2004年 9 956788 1435182
B 段 2004年 15 18532 27798
B 段 2004年 18 686824 1030236
B 段 2004年 21 289675 434512.5
B 段 2004年 27 462303 693454.5
B 段 2004年 30 591880 887820

想要(称之为宽):

班级 年份 金额 3 6 9 12 15 18 21 24 27 30
A 段 2004年 美元_付费_损失 1000000 950547 971746 912356 26916 235696 641805 653554
A 段 2004年 美元增量损失 1500000 1425820.5 1457619 1368534 40374 353544 962707.5 980331
B 段 2004年 美元_付费_损失 1000000 634698 956788 18532 686824 289675 462303 591880
B 段 2004年 美元增量损失 1500000 952047 1435182 27798 1030236 434512.5 693454.5 887820

我尝试运行的代码是

proc transpose data=Long out=Wide name=Amount;      
     id Dev_Qtr;        
     var Paid_Loss Inc_Loss;        
     by Class Year;     
run;

错误为“ERROR: ID 值“'**'n”在同一个 BY 组中出现两次。”

是否可以创建一个输出,就像我试图通过 proc 转置在 SAS 中实现的那样,或者是否有更好的方法来做到这一点?我展示的数据示例在同一年的各个季度有 2 个类别,但实际数据将以这种方式跨越 10 年的历史。也许这需要一些循环?

将不胜感激任何帮助!我绝不是 SAS 专家,这显然超出了我通常的驾驶范围!

sas transpose
1个回答
0
投票

总结一下评论讨论:

  • 对于从宽到长的转置,对于
    by
    id
    变量值的每个组合只能有一个记录。这就是错误所指示的内容。
  • id
    使用 formatted 值,因此虽然底层数值是唯一的,但格式化的值却不是(可能是由于格式宽度不足)。
    PROC TRANSPOSE
    尝试在
    by
    组中创建相同的变量两次并出错。修复的格式是这样的。
© www.soinside.com 2019 - 2024. All rights reserved.