【发布时间】:2022-01-12 08:12:39
【问题描述】:
我有一个名为 response 的变量的 sas 数据集,它有以下记录:
等等。
这些都是相同的记录,我需要删除最后一个特殊的字符并将记录返回为
当我使用压缩函数时,它会删除中间的星号并返回: TrailerOffer 这不是我想要的。 有人可以帮我编码吗?如果这些是特殊的,我需要删除最后一个字符。
【问题讨论】:
标签: sql sas substring sas-macro
我有一个名为 response 的变量的 sas 数据集,它有以下记录:
等等。
这些都是相同的记录,我需要删除最后一个特殊的字符并将记录返回为
当我使用压缩函数时,它会删除中间的星号并返回: TrailerOffer 这不是我想要的。 有人可以帮我编码吗?如果这些是特殊的,我需要删除最后一个字符。
【问题讨论】:
标签: sql sas substring sas-macro
您可以使用正则表达式字符类来指定“特殊”尾随字符。在此示例替换模式中,任何不是字母或数字的字符都将被删除。在$ 之前需要\s*,因为当SAS 字符变量的值被传递给正则表达式引擎时,它们的尾随空格。
在SAS documentation中了解更多关于正则表达式类分组的信息
data have;
length response $20.; 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;
【讨论】:
prx=prxchange("s/^W*(.*?)\W*$/$1/",-1, response);
将删除尾随的特殊字符
data have;
length response $20.;
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/",-1, response);
put prx;
run;
77
78 data _null_;
79 set have;
80 prx=prxchange("s/^W*(.*?)\W*$/$1/",-1, response);
81 put prx;
82 run;
Trailer*Offer
Trailer*Offer
Trailer*Offer
Trailer*Offer
【讨论】: