楼主: xiayuguoguo
1237 6

[问答] 关于字符串的一个难题 [推广有奖]

  • 1关注
  • 0粉丝

已卖:23份资源

本科生

92%

还不是VIP/贵宾

-

威望
0
论坛币
23 个
通用积分
0
学术水平
3 点
热心指数
2 点
信用等级
0 点
经验
1309 点
帖子
103
精华
0
在线时间
58 小时
注册时间
2011-4-12
最后登录
2021-12-28

楼主
xiayuguoguo 发表于 2013-8-12 15:16:41 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
数据是这样的:
f1       f2
aa      A
aa      H
aa      
aa      
aa      BH
bb     AB
bb     B
bb     

f1取aa或bb的观测数都不是确定的,f2可为A、B、H、F字符中的一个或几个的组合或空值。
现在我只想得到两个观测,f1分别取aa、bb,对应的f2取各观测f2的并集,如aa的f2应取ABH,bb的f2应取AB.
希望大家能帮我想出个简单有效的办法,谢谢!
二维码

扫码加我 拉你入群

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

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

关键词:字符串 字符串

本帖被以下文库推荐

沙发
xiayuguoguo 发表于 2013-8-12 15:46:13
期盼高人解答

藤椅
可~乐 发表于 2013-8-12 15:49:29
  1. data t;
  2. input f1 $ f2 $;
  3. cards;
  4. aa A
  5. aa H
  6. aa .
  7. aa .
  8. aa BH
  9. bb AB
  10. bb B
  11. bb .
  12. ;
  13. run;

  14. data tt;
  15.         set t;
  16.         length=length(compress(f2));
  17.         do i=1 to length;
  18.                 var=substr(f2,i,1);
  19.                 output;
  20.         end;
  21.         keep f1 var;
  22. run;

  23. proc sort data=tt out=ttt nodupkey;
  24.         by f1 var;
  25. run;

  26. data tttt;
  27.         set ttt;
  28.         by f1;
  29.         length f2 $ 10;
  30.         retain f2;
  31.         if first.f1 then f2=var;
  32.         else f2=cats(f2,var);
  33.         if last.f1;
  34.         keep f1 f2;
  35. run;
复制代码
已有 1 人评分经验 论坛币 学术水平 热心指数 收起 理由
Imasasor + 40 + 60 + 3 + 3 热心帮助其他会员

总评分: 经验 + 40  论坛币 + 60  学术水平 + 3  热心指数 + 3   查看全部评分

板凳
xiayuguoguo 发表于 2013-8-12 17:20:00
可~乐 发表于 2013-8-12 15:49
多谢!关键在于output 、nodupkey和retain啊!有没有更简单一些的方法?

报纸
hsaotsud 发表于 2013-8-12 20:13:40
  1. data need(keep=f1 new);
  2.     do until(last.f1);
  3.         set raw;
  4.         by f1;
  5.         length f2_f2 $10;
  6.         f2_f2 = cats(f2_f2, f2);
  7.     end;
  8.     length new $10;
  9.     do i = 1 to length(f2_f2);
  10.         new = ifc(find(new, substr(f2_f2, i, 1)), new , cats(new, substr(f2_f2, i, 1)));
  11.     end;
  12. run;
复制代码

地板
bobguy 发表于 2013-8-13 11:06:03
Hope it helps.

data tmp;
length f1 $2 f2 $10;
infile cards truncover;
input f1       f2;
cards;
aa      A
aa      H
aa      
aa      
aa      BH
bb     AB
bb     B
bb  
;

data needed;
  length s t $300;
  retain s ' ';

  set tmp;
  by f1;
  if first.f1 then s=' ';
  s=catt(s,f2);
  if last.f1 then do
    t=char(s,1);
    do i=2 to length(s);
            char1=char(s,i);
            if find(t, char1) then ;
                else t=catt(t,char1);
        end;
        output;
  end;

  
  keep f1 t;
  rename t=f2;
  run;

  proc print;run;

  

7
Tigflanker 发表于 2013-8-28 13:21:46
  1. data t;
  2. input f1 $ f2 $;
  3. cards;
  4. aa A
  5. aa H
  6. aa .
  7. aa .
  8. aa BH
  9. bb AB
  10. bb B
  11. bb .
  12. ;
  13. run;

  14. %macro T;

  15. %let aa=;%let bb=;
  16. data _null_;set t;
  17.   if f1='aa' then call symputx('aa',symget("aa")||f2);
  18.   else call symputx('bb',symget("bb")||f2);
  19. run;

  20. data need;if 0 then set t;
  21.   f1='aa';f2=compress('ABHF',compress('ABHF',"&aa."));output;
  22.   f1='bb';f2=compress('ABHF',compress('ABHF',"&bb."));output;
  23. stop;run;

  24. %mend;%T;
复制代码
Bye SAS.
若有缘,能重聚。

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

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