如果特殊,SAS 删除最后一个字符

SAS remove the last characters if special

我有一个名为 response 的变量的 sas 数据集,它有以下记录:

等等。

这些都是相同的记录,我需要删除最后一个特殊字符,return 记录为

当我使用压缩函数时,它会删除 return 和 return 之间的星号: TrailerOffer 这不是我想要的。 有人可以帮我编码吗?如果这些字符很特殊,我需要删除最后一个字符。

使用PRXCHANGE

prx=prxchange("s/^W*(.*?)\W*$//",-1, response);

将删除结尾的特殊字符

data have;
length response .;
response="Trailer*Offer";output;
response="Trailer*Offer*";output;
response="Trailer*Offer???";output;
response="Trailer*Offer?...";output;
run;

data _null_;
set have;
prx=prxchange("s/^W*(.*?)\W*$//",-1, response);
put prx;
run;
 77         
 78         data _null_;
 79         set have;
 80         prx=prxchange("s/^W*(.*?)\W*$//",-1, response);
 81         put prx;
 82         run;
 
 Trailer*Offer
 Trailer*Offer
 Trailer*Offer
 Trailer*Offer

您可以使用正则表达式字符 classes 来指定 'special' 结尾字符。在此示例替换模式中,任何非字母或数字的字符都将被删除。 \s*$ 之前是必需的,因为 SAS 字符变量在将值传递给正则表达式引擎时会有尾随空格。

SAS documentation

中了解有关正则表达式 class 分组的更多信息
data have;
length response .; input response; datalines;
Trailer*Offer
Trailer*Offer*
Trailer*Offer???
Trailer*Offer?...
Offer#1
Offer#1?
Offer#1*?
;
data want;
  set have;
  response = prxchange ('s/[^a-z0-9]+\s*$//i', 1, response);
run;