regex 为什么我的正则表达式只更改SAS中的第一个条目?

ybzsozfc  于 2022-11-18  发布在  其他
关注(0)|答案(2)|浏览(135)

我有一些文本条目(自治市),我需要删除结尾的s。

Data test;
input city $;
datalines;
arjepogs
askers
Londons
;
run;

data cities;
set test;
if prxmatch("/^(.*?)s$/",city) 
then city=prxchange("s/^(.*?)s$/$1/",-1,city);
run;

奇怪的是,我的s只从我的第一个条目中删除。

我做错了什么?

hgb9j2n6

hgb9j2n61#

您将CITY定义为长度$8。在London中的s位于字符串的第7个位置。而不是字符串的最后一个位置。使用TRIM()函数删除变量值中的尾随空格。

data have;
  input city $20.;
datalines;
arjepogs
Kent
askers
Londons
;

data want;
  set have;
  length new_city $20 ;
  new_city=prxchange("s/^(.*?)s$/$1/",-1,trim(city));
run;

测试结果

Obs    city        new_city

 1     arjepogs    arjepog
 2     Kent        Kent
 3     askers      asker
 4     Londons     London

您也可以只更改REGEX以考虑尾随空格。

new_city=prxchange("s/^(.*?)s\ *$/$1/",-1,city);
aor9mmx1

aor9mmx12#

下面是另一个只使用SAS字符串函数而不使用正则表达式的解决方案。请注意,在这种情况下,不需要修剪变量:

data cities;
  set test;
  if substr(city,length(city)) eq "s" then
     city=substr(city,1,length(city)-1);
run;

相关问题