Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String SAS:如果字符串中的第一个字等于另一个变量中的一个字,如何删除它_String_Word_Sas - Fatal编程技术网

String SAS:如果字符串中的第一个字等于另一个变量中的一个字,如何删除它

String SAS:如果字符串中的第一个字等于另一个变量中的一个字,如何删除它,string,word,sas,String,Word,Sas,我有variable1字符串,如“asdfsad你做什么”,“qwer你叫什么名字”,“Zebra” 和variable2带字符串“asdfsad”、“qwer”、“Animal” 如果variable1中的第一个单词等于variable2中的单词,我想从字符串中删除它。到目前为止,我唯一能想到的是分别替换每个单词: i、 e.variable1=tranwrd(variable1,“asdfsad”和“”)等等。但是我有很多词要替换 非常感谢您的帮助。像这样的东西怎么样: data sampl

我有
variable1
字符串,如
“asdfsad你做什么”,“qwer你叫什么名字”,“Zebra”

variable2
带字符串
“asdfsad”、“qwer”、“Animal”

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

i、 e.
variable1=tranwrd(variable1,“asdfsad”和“”)等等。但是我有很多词要替换


非常感谢您的帮助。

像这样的东西怎么样:

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;
这将用于匹配整个第一个单词。它会在剩下的文本中留下空格或其他标点符号,但如果您愿意,您应该能够轻松地进行更改


如果你的问题是一个字符一个字符地匹配,而不是在整个第一个单词上匹配,那么这将是一个非常不同的问题,我建议你发布一个新问题。

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

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

对于数千个单词来说,这可能不是有效的或可行的,但您可以通过以下方式使用Perl正则表达式(例如
s/search/replacement/


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

这也可以删除除第一次出现以外的其他出现。很抱歉,我接受答案太晚了-但我在过去两个月一直在使用此选项-谢谢!或者,您可以编写
如果scan(variable1,1)eq variable2,那么variable1=substr(variable1,index(variable1,scan(variable1,2))。这将删除所有分隔前两个单词的空格、破折号等(但不适用于“动物农场”)
if scan(variable1,1)=variable2 then
  variable1=substr(variable1,index(variable1," "));
/* 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;