Sas 从字符串中删除中间的首字母,但不删除中间的名称

Sas 从字符串中删除中间的首字母,但不删除中间的名称,sas,proc-sql,Sas,Proc Sql,我试图找到一种方法,从包含名字和中间首字母的字符串中删除中间首字母(例如“Mary a”需要是“Mary”) 但是,如果中间名/第二名不仅仅是首字母,我需要保留它(例如“Mary Ann”将保留为“Mary Ann”) 非常感谢 Matt下面是一个如何使用正则表达式替换来实现这一点的示例。我使用了proc sql,但这也适用于数据步骤: data names; input name & $5.; cards; Aa A Aa Aa Aaa A ; run; proc sql; se

我试图找到一种方法,从包含名字和中间首字母的字符串中删除中间首字母(例如“Mary a”需要是“Mary”)

但是,如果中间名/第二名不仅仅是首字母,我需要保留它(例如“Mary Ann”将保留为“Mary Ann”)

非常感谢


Matt

下面是一个如何使用正则表达式替换来实现这一点的示例。我使用了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;
正则表达式的构建如下所示:

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

    • 尝试使用功能
      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