如何删除出现多次的字符后面的字符串?

时间:2018-04-13 01:10:55

标签: python sas

我有一段: 政府机构是指任何国家或政府。该术语将进一步解释。担保义务是指任何人(无重复)的任何义务。知识产权是指与任何知识产权相关的所有实际或潜在权利。

在此段中, 表示 出现三次。我想在第二次出现手段后删除所有字符串。在上面的例子中,我想要的结果是: 政府机构是指任何国家或政府。该术语将进一步解释。担保义务

请问如何通过SAS实现这一目标?

或者Python也没关系,但问题是现在我有一个包含两列的表。第一列是公司名称,另一列是包含上述段落的段落。我有很多观察。如何在第二个 表示 之前生成一个显示字符串的新列?

2 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情

text = """Governmental Authority means any nation or government. 
The term would be explained further. Guaranty Obligations means as to any 
Person (without duplication) any obligation. Intellectual Property Rights 
means all actual or prospective rights arising in connection with 
any intellectual property."""

means_indexes = [ix for ix, i in enumerate(text.split()) if i == 'means']
txt = ''
if len(means_indexes) > 1: txt = ' '.join(text.split()[0:temp[1]])
else: txt = text

print(txt)
  

'政府机构是指任何国家或政府。这个词会   进一步解释。担保义务'

答案 1 :(得分:1)

您可以在SAS中使用FINDW()。 FINDW中的第四个参数是从哪里开始搜索,因此搜索两次。 执行单个搜索以查找第一个术语。 进行第二次搜索以找到第二个术语。

您可能希望查看修改器的选项,尤其是如果您的数据不是完全相同的情况。有一些忽略大小写的选项,或者您可以使用UPCASE()将所有内容都设置为大写。

data have;
    length text want $5000;
    search_term='means';
    text="Governmental Authority means any nation or government. The term would be explained further. Guaranty Obligations means as to any Person (without duplication) any obligation. Intellectual Property Rights means all actual or prospective rights arising in connection with any intellectual property.";
    first_mean=findw(text, search_term);
    second_mean=findw(text, search_term, ' ', first_mean+5);
    want=substr(text, 1, second_mean-2);
run;

proc print;
run;
相关问题