python—分组数据并查找公共字符串

o4hqfura  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(479)

我有一个对数据进行分组并从中获取公共字符串的通用需求。我不确定哪种技术能满足这个特定的要求。因此将其称为泛型。我目前可以访问sql、unix命令、sas、mstr、informatica和python。
实际数据:

  1. Field A| Field B | Field c
  2. A | 001 | Alan J
  3. A | 001 | Alan Walker
  4. A | 001 | Walker Alan
  5. A | 001 | Alexander AlanJoseph

所需输出:

  1. Field A | Field B | Field C
  2. A | 001 | Alan

注:根据字段a和字段b的分组,需要找出字段c中数据的共同模式
有人能帮我一下吗?

yks3o0rb

yks3o0rb1#

欢迎来到sas。你的问题可以用很多方法来解决,我给你道循环版本。

  1. data have;
  2. input A$ 1-3 B$ 12-15 C$ 21-43;
  3. cards;
  4. A | 001 | Alan
  5. A | 001 | Alan Walker
  6. A | 001 | Walker Alan
  7. A | 001 | Alexander AlanJoseph
  8. B | 002 | Jay
  9. B | 002 | Jay Zhou
  10. B | 002 | JayJay
  11. ;
  12. run;
  13. proc sort;
  14. by A B;
  15. run;
  16. data want(keep=A B C);
  17. length string $1024.;
  18. do until(last.B);
  19. set have;
  20. by A B;
  21. string = catx('@',string,C);
  22. count = sum(count,1);
  23. end;
  24. do until(last.B);
  25. set have;
  26. by A B;
  27. do i = 1 to count;
  28. if find(scan(string,i,'@'),cats(C)) then match = sum(match,1);
  29. end;
  30. if count = match then output;
  31. end;
  32. run;
  33. proc print;
  34. run;
展开查看全部
izkcnapc

izkcnapc2#

下面是解决方案,
sql语句

  1. select field_a, field_b, field_c from
  2. (select distinct d1.*, row_number() over(partition by d1.field_a order by d1.field_c)
  3. as rnk from data d1
  4. inner join data d2 on
  5. (instr(d1.field_c, d2.field_c) > 0)) where rnk=1;

https://dbfiddle.uk/?rdbms=oracle_18&fiddle=ccd9837b8e893ed42f8ade3b7e7e9d40
信息
使用表达式转换,使用 INSTR 函数(也可以使用正则表达式)。然后,将端口传递给rank转换,并将其排序为字段c并获取前1个值。

相关问题