2012-09-05 147 views
1

一个字,我有variable1使用字符串如"asdfsad What do you do", "qwer What is your name", "Zebra"SAS:如何删除的第一个字一个字符串,如果它等于在另一个变量

而且variable2用绳子"asdfsad", "qwer", "Animal"

我想删除的第一个字从变量1中的字符串,如果它等于variable2中的单词。到目前为止,我唯一可以提出的是分别替换每个单词:

variable1=tranwrd(variable1, "asdfsad", "");等,但我有很多词语来代替。

非常感谢您的帮助。

回答

2

怎么是这样的:

data sample; 
    length variable1 variable2 $100; 
    variable1= "asdfsad What do you do"; variable2 = "asdfsad"; output; 
    variable1= "qwer What is your name"; variable2 = "qwer"; output; 
    variable1= "Zebra"     ; variable2 = "Animal"; output; 
run; 

data fixed; 
    length first_word $100; 

    set sample; 

    first_word = scan(variable1,1); 
    if first_word eq variable2 then do; 
    start_pos = length(first_word) + 1; 
    variable1 = substr(variable1,start_pos); 
    end; 
run; 

这将为在整个第一字匹配工作。它留下剩余文本中的空格或其他标点符号,但如果您愿意,您应该可以轻松更改。

如果您的问题是匹配字符而不是整个第一个字,那么这将是一个非常不同的问题,我会建议发布一个新的问题。

+0

对不起,我迟到了接受答案 - 但我在过去两个月一直在使用它 - 谢谢! – user1284978

0

如果您对tranwrd的结果满意,也可以使用它。你只需要小心空白

variable1 = strip(tranwrd(variable1, strip(variable2), '')); 
+0

这可以删除第一次出现以外的事件。 –

0
if scan(variable1,1)=variable2 then 
    variable1=substr(variable1,index(variable1," ")); 
0

这可能不会是有效的或可行的数千字的,但你可以通过prxchange

使用Perl的正则表达式(如 s/search/replacement/
/* words to match delimited by "|" */ 
%let words = asdfsad|qwer|Animal|foo|bar|horse; 

/* example data */ 
data example; 
    infile datalines dlm=',' dsd; 
    input string: $256.; 
datalines; 
asdfsad What do you do 
qwer What is your name 
Zebra 
food is in the fridge 
foo A horse entered a bar 
; 
run; 

/* cleaned data */ 
data example_clean; 
    set example; 

    /* 
    regular expression is: 
     - created once on first row (_n_ = 1) 
     - cached (retain regex) 
     - dropped at the end (drop regex). 
    */ 
    if _n_ = 1 then do; 
    retain regex; 
    drop regex; 
    regex = prxparse("s/^(&words)\s+//"); 
    end; 

    string = prxchange(regex, 1, string); /* apply the regex (once) */ 
run; 

在正则表达式(在prxparse构造)的^符号确保它在字的开头唯一匹配,则|符号使其成为“或”匹配和\s+匹配一个或多个空白字符(这就是为什么在我的示例中,“食物”不匹配)。

相关问题