楼主: zhuzju
543 4

[问答] SAS 1行变多行数据 [推广有奖]

  • 0关注
  • 0粉丝

高中生

55%

还不是VIP/贵宾

-

威望
0
论坛币
347 个
通用积分
0.4500
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
316 点
帖子
12
精华
0
在线时间
50 小时
注册时间
2010-4-11
最后登录
2023-12-7

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
请问有一个数据表,如下,1个ID1行 对应几个变量,如何变为同个ID多行 2个变量?
例子:
         
ID RULE_a RULE_cc RULE_x
01 0.1 0.5 0.9


变为
  ID   RULE 取值
01 a 0.1
01 cc 0.5
01 x 0.9


谢谢!
二维码

扫码加我 拉你入群

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

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

关键词:rule 数据表

沙发
Wwxx74 发表于 2022-2-14 22:07:27 |只看作者 |坛友微信交流群
横向数据变纵向数据,使用proc transpose 语句就行

使用道具

藤椅
whymath 发表于 2022-2-15 19:44:47 |只看作者 |坛友微信交流群
您寻求的是数据转置方法,至少有以下两种可选:
1. 使用proc transpose过程步进行转置;
2. 基于数组循环,使用output语句进行转置;
前者是模块化的,语句固定,简单易用。后者更为灵活,也需要花费更多的精力才能掌握。
  1. data have;
  2.   input id$ RULE_a RULE_cc RULE_x;
  3.   cards;
  4. 01        0.1        0.5        0.9
  5. ;
  6. run;

  7. *1. 使用proc transpose进行转置;
  8. proc transpose data=have out=want;
  9.   by id;
  10.   var RULE_a RULE_cc RULE_x;
  11. run;

  12. data want;
  13.   set want(rename=(_NAME_=RULE COL1=aval));
  14.   RULE=scan(vname(RULE),2,'_');
  15. run;

  16. *2. 使用数组循环+output语句进行转置;
  17. data want(drop=RULE_a RULE_cc RULE_x);
  18.   set have;

  19.   array _par_ RULE_a RULE_cc RULE_x;
  20.   do over _par_;
  21.     RULE=scan(vname(_par_),2,'_');
  22.     aval=_par_;
  23.     output;
  24.   end;
  25. run;
复制代码

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-11-6 07:08