我试图找到一种方法从包含名字和中间名字的字符串中删除Middle初始值(例如" Mary A"需要" Mary" )。
但是,我需要保留中/秒名称,如果它不仅仅是一个初始名称(例如#34; Mary Ann"将留下#34; Mary Ann")。
非常感谢,
马特
答案 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;
正则表达式的构建如下: