从字符串中删除Middle Initial但不删除Middle Name

时间:2017-10-04 12:47:50

标签: sas proc-sql

我试图找到一种方法从包含名字和中间名字的字符串中删除Middle初始值(例如" Mary A"需要" Mary" )。

但是,我需要保留中/秒名称,如果它不仅仅是一个初始名称(例如#34; Mary Ann"将留下#34; Mary Ann")。

非常感谢,

马特

2 个答案:

答案 0 :(得分:1)

尝试使用函数scan

data test;
    input name $20.;
    cards;
    Mary A
    Anthony B
    Mary Ann
    Anthony Bernard
    ;
run;

data res;
    set test;
    if (length(scan(name,2))=1) then name=scan(name,1);
run;

结果,你得到:

Mary
Anthony
Mary Ann
Anthony Bernard

答案 1 :(得分:0)

以下是使用正则表达式替换执行此操作的示例。我使用过proc sql,但这也适用于数据步骤:

data names;
input name & $5.;
cards;
Aa A
Aa Aa
Aaa A
;
run;

proc sql;
  select prxchange('s/^(\w+)\s+\w\s*$/$1/',-1,name) from names;
quit;

正则表达式的构建如下:

  • 捕获第一个单词
  • 匹配空格,单个字符,然后匹配任意数量的尾随空格
  • 如果整个表达式匹配,则只返回第一个单词,否则返回整个输入字符串。