楼主: 信仰的迷思
954 5

怎样利用参照集里的数据替换字段内的相关字符串?急。。。。 [推广有奖]

  • 2关注
  • 0粉丝

小学生

64%

还不是VIP/贵宾

-

威望
0
论坛币
1 个
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
202 点
帖子
5
精华
0
在线时间
7 小时
注册时间
2012-8-24
最后登录
2013-6-3

信仰的迷思 发表于 2013-4-8 16:14:27 |显示全部楼层
问个问题.... 这个该怎么做
id type
1  a,b
2  a
3  a,b,c
....

参照数据集
nameshort name   
a         xy
b         er
c         abc
...

结果
id type
1  xy,er
2  xy
3  xy,er,abc
...

关键词:字符串 Short Names name type

本帖被以下文库推荐

stata SPSS
zhengbo8 发表于 2013-4-8 18:07:40 |显示全部楼层
本帖最后由 zhengbo8 于 2013-4-8 18:18 编辑

看着步骤多,不过都简单,思路清晰。巧妙利用数据集的合并来匹配,通用性很好。


  1. data a_1;
  2.     length type1 $ 10 type2 $ 10 type3 $ 10;
  3.     input id type1 $ 4 type2 $ 6 type3 $ 8;
  4. datalines;
  5. 1  a,b
  6. 2  a
  7. 3  a,b,c
  8. ;
  9. run;

  10. data a_2(rename=(nameshort=type1));
  11.     length nameshort $ 10;
  12.     input nameshort $ name $;
  13. datalines;
  14. a         xy
  15. b         er
  16. c         abc
  17. ;
  18. run;

  19. data a_3;
  20.     merge a_1 a_2(rename=(name=name1));
  21.     by type1;
  22. run;

  23. proc sort data=a_3;by type2;run;

  24. data a_4;
  25.     merge a_3 a_2(rename=(type1=type2 name=name2));
  26.     by type2;
  27. run;

  28. proc sort data=a_4;by type3;run;

  29. data a_5;
  30.     merge a_4 a_2(rename=(type1=type3 name=name3));
  31.     by type3;
  32. run;

  33. proc sort data=a_5;by id;run;

  34. data final;
  35.     set a_5(drop=type:);
  36.     if id=. then delete;
  37.     type=catx(",",of name:);
  38.     drop name:;
  39. run;

  40. proc datasets lib=work;
  41.     delete a_1 a_2 a_3 a_4 a_5;
  42. quit;
复制代码





2013-04-08_180059.gif





已有 1 人评分论坛币 收起 理由
admin_kefu + 50 热心帮助其他会员

总评分: 论坛币 + 50   查看全部评分

回复

使用道具 举报

老师她摸我 发表于 2013-4-9 13:58:24 |显示全部楼层
本帖最后由 老师她摸我 于 2013-4-9 13:59 编辑
  1. data a;
  2.         input id $ type$;
  3.         datalines;
  4. 1 a,b
  5. 2 a
  6. 3 a,b,c
  7. ;
  8. data b;
  9.         input nameshort $ name $;
  10.         datalines;
  11. a xy
  12. b er
  13. c abc
  14. ;
  15. data _null_;
  16.         set b;
  17.         call symput(nameshort,trim(name));
  18. run;
  19. data c;
  20.         length id $ 8 type $ 20;
  21.         set a;
  22.         type=resolve('&'||tranwrd(type,',',',&'));
  23. run;
复制代码

已有 2 人评分学术水平 热心指数 信用等级 收起 理由
pobel + 3 + 3 + 3 精彩帖子
ziyenano + 5 + 5 + 5 精彩帖子,非常巧妙

总评分: 学术水平 + 8  热心指数 + 8  信用等级 + 8   查看全部评分

欢迎加入SAS群:144839730-蜗牛
回复

使用道具 举报

bobguy 发表于 2013-4-10 06:33:39 |显示全部楼层
Here is a simple one to use sas format.
proc format;
value $nameshort   
a   =      xy
b   =      er
c   =      abc
;
run;

data tmp;
length id 8 type $8 type2 $30;
input id  type;
n=countw(type,',');
do i=1 to n;
type2=catx(',', type2, put(scan(type,i,','),$nameshort.));
end;
drop i n;
cards;
1  a,b
2  a
3  a,b,c
;
run;

proc print;run;
回复

使用道具 举报

regreb 发表于 2013-4-10 21:33:45 |显示全部楼层
用format value语句直接转换也可以
回复

使用道具 举报

wangfengxi 发表于 2013-4-11 03:30:19 |显示全部楼层
学习了 谢谢各位
回复

使用道具 举报

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

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

GMT+8, 2019-3-22 19:45