楼主: AngleeZZ
728 4

[程序分享] SAS行列转换一定要用proc transpose?No No No,其他2种替代方案同样实现! [推广有奖]

  • 0关注
  • 0粉丝

本科生

76%

还不是VIP/贵宾

-

威望
0
论坛币
338 个
通用积分
2.7100
学术水平
7 点
热心指数
8 点
信用等级
3 点
经验
9151 点
帖子
139
精华
0
在线时间
71 小时
注册时间
2019-1-7
最后登录
2026-1-13

楼主
AngleeZZ 发表于 2023-8-24 12:38:34 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
行列转换简单示例Before转换
Obs

TRTN

AGEGR1N

AVAL

11111
21212
31313
42121
52222
62323
After转换
Obs

TRTN

AGEGR_1

AGEGR_2

AGEGR_3

11111213
22212223
>首选方案proc transpose一发入魂?\
code示例如下
data test;
TRTN=1; AGEGR1N=1; AVAL=11; output;
TRTN=1; AGEGR1N=2; AVAL=12; output;
TRTN=1; AGEGR1N=3; AVAL=13; output;
TRTN=2; AGEGR1N=1; AVAL=21; output;
TRTN=2; AGEGR1N=2; AVAL=22; output;
TRTN=2; AGEGR1N=3; AVAL=23; output;
run;
proc transpose data=test out=test_tran0 prefix=AGEGR_;
by TRTN;
  id AGEGR1N;
  var AVAL;
run;
>替代方案1利用data过程步的retain+if first/if last组合
data test_tran1;
  set test;
  by TRTN AGEGR1N;
  retain AGEGR_1 AGEGR_2 AGEGR_3;
  if first.TRTN then call missing(AGEGR_1,AGEGR_2,AGEGR_3);
  if AGEGR1N=1 then AGEGR_1=AVAL;
  if AGEGR1N=2 then AGEGR_2=AVAL;
  if AGEGR1N=3 then AGEGR_3=AVAL;
  if last.TRTN then output;
  keep TRTN AGEGR_1 AGEGR_2 AGEGR_3;
run;
>替代方案2讨厌data过程步,特别偏爱sql的小伙伴们可以看看下面示例code,估计很少有人用,我反正是没见过其他sp这个写过,嘿嘿
proc sql noprint;
  create table test_tran2 as
  select distinct TRTN
            , max(case when AGEGR1N=1 then AVAL else . end) as AGEGR_1
            , max(case when AGEGR1N=2 then AVAL else . end) as AGEGR_2
            , max(case when AGEGR1N=3 then AVAL else . end) as AGEGR_3
  from test
  group by TRTN;
quit;
>两种方案的执行结果
001_transpose_result.png

结论

码code是个辛苦的体力活,偶尔换个解法,换个思维,枯燥也许会变的有趣,工作也许更有动力。
以上介绍仅供参考,具体问题具体对待,如果有更有趣的解法欢迎留言探讨,共同进步。



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Transpose Trans pose ROC POS

已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
whymath + 12 + 24 + 3 + 3 + 3 精彩帖子

总评分: 经验 + 12  论坛币 + 24  学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

沙发
meychang 发表于 2023-10-16 00:41:05
非常好,学习了。

藤椅
zhoujian1994 发表于 2024-3-5 22:02:55
非常棒,学到了

板凳
fxf258 发表于 2024-3-7 08:01:14
不错不错,又学习了!

报纸
whymath 发表于 2024-3-13 11:31:34
感谢分享,我在官方论坛找到类似的话题,想起你这篇分享,就也放在这里作为参考:https://communities.sas.com/t5/S ... to-Wide/td-p/919887

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-15 11:50