在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()。
答案 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;