一种在SAS中用其他文本替换不同文本的功能

时间:2015-09-03 14:39:34

标签: sas

我想将一个文本组合替换为另一个组合。例如

nm libdynlib.so | grep printMe_dyn
00000000000006e0 T printMe_dyn

必填结果:Sub Test() SplitText ThisWorkbook.Worksheets("Sheet1").Range("A1:A11") End Sub Sub SplitText(SrcRange As Range) Dim rCell As Range For Each rCell In SrcRange.Cells rCell.Offset(, 1) = Left(rCell, InStrRev(rCell, " ") - 1) rCell.Offset(, 2) = Mid(rCell, InStrRev(rCell, " ") + 1) Next rCell End Sub

我想要替换的这种组合。我对使用宏或FCMP或if else条件不感兴趣。

是否有任何功能可以同时执行所有操作?我尝试使用Perl表达式,该表达式同时适用于一个data test; a='raja\ram{work}italic'; if index(a,'\') then b=tranwrd(a,'\','\\'); if index(a,'{') then b=tranwrd(a,'{','\{'); if index(a,'}') then b=tranwrd(a,'}','\}'); if index(upcase(a),'ITALIC') then b=tranwrd(a,substr(a,index(upcase(a),'ITALIC'),length('ITALIC')),'\i'); run;

2 个答案:

答案 0 :(得分:0)

你的正则表达式是正确的。你有一组字符,对,你想要总是\前置?因此,搜索(该组字符之一),使用[...]进行搜索,然后使用捕获组向其添加\。这是转义字符,因此您必须在任何时候添加两个(\\将其自身转义为\)。

data test;
 a='Hello\Goodbye{stuff}';
 b= prxchange('s/([\\{}])/\\$1/',-1,a);
 put b=;
run;

您应该在第二个表达式中执行italic位(或者只使用tranwrd)。这是一个完全不同的替代品,虽然理论上可以放在一个,但会使它太乱。

答案 1 :(得分:0)

这个问题几乎与其他问题相同:Multiple search and replace within a string through regular expression in SAS

这是巧合吗?

以下是适用于其他问题的代码。

abc\\pqr\{work\};

结果:%let text = BOLD\ITALIC\ITALICBOLD\BOLDITALIC\B\I\IB\BI; data _null_; var=prxchange("s/BOLD/b/",-1,"&text"); var=prxchange("s/ITALIC/i/",-1,var); var=lowcase(var); put var; run;

b\i\ib\bi\b\i\ib\bi

结果:width