楼主: appleqiuqiu
11080 19

[问答] SAS里如何按id合并同列字符串 [推广有奖]

  • 0关注
  • 1粉丝

已卖:773份资源

副教授

41%

还不是VIP/贵宾

-

威望
0
论坛币
3666 个
通用积分
2.9200
学术水平
2 点
热心指数
2 点
信用等级
2 点
经验
4191 点
帖子
133
精华
0
在线时间
1514 小时
注册时间
2010-4-27
最后登录
2022-6-22

楼主
appleqiuqiu 发表于 2013-5-28 14:36:16 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我的问题如题目所示,在网上搜了好多,发现用sql做的居多,但是sas里好像没有stuff这个函数,所以在此请教各位大神如何用sas实现,为了更易读懂,我举例说明:
我的数据集是这样的,有两列,第一列是id,第二列是txt,

id             txt
1           2013考研时间
1           2013考研时间
1           北京大学MBA
1           智联招聘
1           复旦  投毒
2           上交安泰
2           商学院排名
2           大学课程

最后要的效果:
id                 txt
1           “2013考研时间;2013考研时间;北京大学MBA;智联招聘;复旦 投毒”
2           “上交安泰;商学院排名;大学课程”

用分号隔开,两段打上英文的双引号,跪求各位大神指点!!!
二维码

扫码加我 拉你入群

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

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

关键词:字符串 2013考研 stuff 考研时间 北京大学 字符串 如何

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
eijuhz + 1 + 1 + 1 鼓励积极发帖讨论

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

沙发
appleqiuqiu 发表于 2013-5-28 15:08:46
自己顶一下,求帮助!!!

藤椅
boe 发表于 2013-5-28 15:09:29
一种很笨的方法,仅供参考,希望有更好的方法。
  1. data t1;
  2. infile datalines truncover;
  3. input id txt $100.;
  4. datalines;
  5. 1 2013考研时间
  6. 1 2013考研时间
  7. 1 北京大学MBA
  8. 1 智联招聘
  9. 1 复旦 投毒
  10. 2 上交安泰
  11. 2 商学院排名
  12. 2 大学课程
  13. ;
  14. run;
  15. proc transpose data=t1 out=t2(drop=_NAME_);
  16. by id;
  17. var txt;
  18. run;
  19. data t3;
  20. set t2;
  21. length txt $500.;
  22. txt=compress(catx(of col:));
  23. drop col:;
  24. run;
复制代码

Gorgeous girl , I love !

板凳
appleqiuqiu 发表于 2013-5-28 15:30:22
boe 发表于 2013-5-28 15:09
一种很笨的方法,仅供参考,希望有更好的方法。
谢谢!!!!这个方法可以,就是最后你用的函数是catx,我跑的时候出现了一点小问题,就是有的id后面合并的txt是空的,我记得我以前用过一个叫cats,于是我换了一下,就ok了,不知道这俩啥区别。。。。
总之非常感谢,你解决了我的问题!!!!

报纸
boe 发表于 2013-5-28 15:38:14
cats-------Removes leading and trailing blanks, and returns a concatenated character string.
catx-------Removes leading and trailing blanks, inserts delimiters, and returns a concatenated character string.
Gorgeous girl , I love !

地板
appleqiuqiu 发表于 2013-5-28 15:45:57
boe 发表于 2013-5-28 15:38
cats-------Removes leading and trailing blanks, and returns a concatenated character string.
catx- ...
能再请问一下,如果我希望合并的形式是这样的:

1  “2013考研时间;2013考研时间;北京大学MBA;智联招聘;复旦 投毒”;
2  “上交安泰;“商学院排名;大学课程”;

就是中间用分号隔开,形式是字符串,就是加了双引号,这样改如何实现?非常感谢~~
我的原始数据有好几十万条,合并出的txt肯定很大,处理的很头疼,所以麻烦您了。。

7
scarfacetony 发表于 2013-5-28 15:51:27
  1. data test;
  2.         input id text $20.;
  3.         cards;
  4. 1           2013考研时间
  5. 1           2013考研时间
  6. 1           北京大学MBA
  7. 1           智联招聘
  8. 1           复旦  投毒
  9. 2           上交安泰
  10. 2           商学院排名
  11. 2           大学课程
  12. ;
  13. run;

  14. data rst(drop=text);
  15.         set test;
  16.         by id;
  17.         length rst $200.;
  18.         retain rst;
  19.         if first.id then rst=compress(text);
  20.                 else rst=compress(rst)||compress(text);
  21.         if last.id;
  22. run;
复制代码
看了这个视频,我于是有了进股市的信心!
https://bbs.pinggu.org/thread-2787427-1-1.html

8
appleqiuqiu 发表于 2013-5-28 16:00:52
scarfacetony 发表于 2013-5-28 15:51
谢谢,可以实现,还想请问如果希望合并后用分号隔开,并且打上英文的双引号该如何实现?就是下面这样

"2013考研时间;2013考研时间;北京大学MBA;智联招聘;复旦 投毒"

非常感谢!!!

9
boe 发表于 2013-5-28 16:06:40
scarfacetony 发表于 2013-5-28 15:51
学习了
Gorgeous girl , I love !

10
scarfacetony 发表于 2013-5-28 16:07:09
appleqiuqiu 发表于 2013-5-28 16:00
谢谢,可以实现,还想请问如果希望合并后用分号隔开,并且打上英文的双引号该如何实现?就是下面这样

...
  1. data test;
  2.         input id text $20.;
  3.         cards;
  4. 1           2013考研时间
  5. 1           2013考研时间
  6. 1           北京大学MBA
  7. 1           智联招聘
  8. 1           复旦  投毒
  9. 2           上交安泰
  10. 2           商学院排名
  11. 2           大学课程
  12. ;
  13. run;

  14. data rst(drop=text);
  15.         set test;
  16.         by id;
  17.         length rst $200.;
  18.         retain rst;
  19.                 if last.id then text=trim(text)||'"';
  20.         if first.id then rst='"'||trim(text);
  21.                 else rst=catx(';',trim(rst),trim(text));
  22.                 if last.id;
  23. run;
复制代码
打引号的应该会有更好的方法,我这种比较山寨了,
刚注意到“复旦 投毒”间有个空格,如果这个空格要保留的话,就用trim处理了。
看了这个视频,我于是有了进股市的信心!
https://bbs.pinggu.org/thread-2787427-1-1.html

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-3 03:54