如何在SAS中专门替换字符串中的第n个单词

时间:2016-12-21 12:52:37

标签: string replace sas

在sas中,我如何具体替换字符串中的第i个单词?

假设我有一个这样的字符串:

myString = 'aa cccc ddd aa aa 0.85645';

(= 6个单词)我不知道每个单词的长度,我只知道它们是用空格分隔的。

如何将第i个字符串替换为

之类的其他字符串

例如如果i = 4 我想用'bbbbb'替换这个词:

myNewString = 'aa cccc ddd bbbbb aa 0.85645';

我正在寻找一种scan(myString,4,' ')tranwrd组合的功能。

这里的问题是我无法将它们组合起来,因为第一个单词可能是相同的,第四个单词,因此我无法专门针对第四个单词上的转换。我也不能出于同样的原因使用find()。

2 个答案:

答案 0 :(得分:4)

调用SCAN使这很容易。

38         data _null_;
39            String = 'aa cccc ddd aa aa 0.85645';
40            call scan(string,4,p,l,' ');
41            string2 = substrn(string,1,p-1)||'Dummy'||substrn(string,p+l);
42            put _all_;
43            run;

String=aa cccc ddd aa aa 0.85645 p=13 l=2 string2=aa cccc ddd Dummy aa 0.85645 _ERROR_=0 _N_=1

答案 1 :(得分:1)

这是一种做到这一点的方法。正则表达式也可能值得研究。

data example;
myString = 'aa cccc ddd aa aa 0.85645';
length myWord  $32 t_myString $1000;
myWord = 'Dummy';
do i = 1 by 1 while (myWord ne '');
myWord = scan(myString,i,' ');
if i = 4 then myWord = 'bbbbb';
t_mystring = catx(' ',t_myString,myWord);
end;
myString = t_myString;
drop myWord t_myString;
run;