楼主: edragon1983
884 5

[有偿编程] 数据转换整理求教 [推广有奖]

  • 0关注
  • 0粉丝

讲师

15%

还不是VIP/贵宾

-

威望
0
论坛币
5143 个
通用积分
7.7389
学术水平
0 点
热心指数
3 点
信用等级
0 点
经验
7801 点
帖子
217
精华
0
在线时间
419 小时
注册时间
2007-8-29
最后登录
2024-5-25

10论坛币
data x;
input id x1 $ x2 $ x3 $ x4 $ x5 $ @@;
cards;
1 张三 李四 . . .
2 张二 李三 王五 . .
3 王五 赵六 孙七 李八 钱九
;
run;

想得的结果:
id  张三 李四 张二 李三 王五  赵六 孙七 李八 钱九
1    1     1     0      0        0      0      0      0      0
2    0     0     1      1        1      0      0      0      0     
3    0     0     0      0        1      1      1      1      1


以上是数据集举例
请教下有没有什么便捷的程序可以实现

最佳答案

关键词:数据转换 cards Input Data card
沙发
335845131 发表于 2020-5-7 16:59:29 |只看作者 |坛友微信交流群
  1. options validvarname=any;

  2. options symbolgen=0;
  3. data x;
  4.         input id x1$ x2$ x3$ x4$ x5$ @@ ;
  5. cards;
  6. 1 张三 李四 nan nan nan
  7. 2 张二 李三 王五 nan nan
  8. 3 王五 赵六 孙七 李八 钱九
  9. ;
  10. run;
  11. %macro c;
  12. data _null_;
  13.                 set x  nobs=m;
  14.                 %do q=1 %to 5;                       
  15.                         call symputx('id'||compress(id)||compress(&q),x&q);
  16.                 %end;
  17. run;

  18. data a;
  19.         set x;
  20.         %do m=1 %to 3;
  21.                 %do q=1 %to 5;
  22. /*                        value=RESOLVE('id'||compress(&m)||compress(&q));*/
  23.                         if (x&q^=nan) and (&m=id)  then do;
  24.                                 &&id&m&q='1';
  25.                                 end;
  26.                         else if(x&q=nan) and (&m=id) then  do;
  27.                                 &&id&m&q='0';
  28.                                 %put &&id&m&q &m &q;
  29.                                 end;
  30.                 %end;
  31.         %end;
  32.         drop nan x1 x2 x3 x4 x5;
  33. run;
  34. %mend;
  35. %c;
复制代码
上效果图 202059-10819.jpg

使用道具

藤椅
数学学徒 发表于 2020-5-7 17:02:25 |只看作者 |坛友微信交流群
没看懂楼主啥意思,再说清楚点可以吗?

使用道具

板凳
edragon1983 发表于 2020-5-7 21:01:40 |只看作者 |坛友微信交流群
想得的结果:
id  张三 李四 张二 李三 王五  赵六 孙七 李八 钱九
1    1     1     0      0        0      0      0      0      0
2    0     0     1      1        1      0      0      0      0     
3    0     0     0      0        1      1      1      1      1

这里面 id  张三 李四 张二 李三 王五  赵六 孙七 李八 钱九  是变量名  
后面
1    1     1     0      0        0      0      0      0      0
2    0     0     1      1        1      0      0      0      0     
3    0     0     0      0        1      1      1      1      1
是数据

其中id与原始数据一致

使用道具

报纸
Cecilia_Xi 在职认证  发表于 2020-5-7 22:56:28 |只看作者 |坛友微信交流群
最好可以把模拟数据集给出来,那样帮忙的小伙伴,可以直接在sas中进行数据转换,不需要新建数据集

使用道具

地板
zdl1225 发表于 2020-5-8 16:51:58 |只看作者 |坛友微信交流群
供参考:
  1. data a;
  2. input id  x1:$20. x2:$20. x3:$20. x4:$20. x5:$20.;
  3. cards;
  4. 1 张三 李四 . .  .
  5. 2 张二 李三 王五 . .
  6. 3 王五 赵六 孙七 李八 钱九
  7. ;
  8. run;
  9. proc transpose data=a out=b;
  10.         by id;
  11.         var x1-x5;
  12. run;
  13. proc report data=b;
  14.         column id col1;
  15.         define id/group;
  16.         define col1/across "" order=data;
  17. run;
复制代码

使用道具

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

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

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

GMT+8, 2024-6-2 12:44