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

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

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

Field A| Field B | Field c
A      | 001     | Alan J
A      | 001     | Alan Walker 
A      | 001     | Walker Alan 
A      | 001     | Alexander AlanJoseph

所需输出:

Field A | Field B | Field C 
A       | 001     | Alan

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

yks3o0rb

yks3o0rb1#

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

data have;
    input A$ 1-3 B$ 12-15 C$ 21-43;
    cards;
    A      | 001     | Alan 
    A      | 001     | Alan Walker 
    A      | 001     | Walker Alan 
    A      | 001     | Alexander AlanJoseph
    B      | 002     | Jay 
    B      | 002     | Jay Zhou
    B      | 002     | JayJay 
;
run;

proc sort;
    by A B;
run;

data want(keep=A B C);
    length string $1024.;

    do until(last.B);
        set have;
        by A B;
        string = catx('@',string,C);
        count = sum(count,1);
    end;

    do until(last.B);
        set have;
        by A B;
        do i = 1 to count;
            if find(scan(string,i,'@'),cats(C)) then match = sum(match,1);
        end;
        if count = match then output;
    end;
run;

proc print;
run;
izkcnapc

izkcnapc2#

下面是解决方案,
sql语句

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

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

相关问题