2015-06-09 67 views
1

数据:SAS:如何删除两个特定位置之间的单词?

Hell_TRIAL21_o World 
Good Mor_Trial9_ning 

如何删除_TRIAL21__TRIAL9_

我所做的是我找到了第一个_和第二个_的位置。然后我想从第一个_和第二个_压缩。但是压缩功能不可用于这样做。怎么样?

x = index(string, '_'); 
if (x>0) then do; 
    y = x+1; 
    z = find(string, '_', y); 
end; 

回答

2

PERL正则表达式是识别这类字符串的好方法。 call prxchange是将删除相关字符的功能。它需要预先prxparse来创建搜索和替换参数。

我在这里使用modify来修改现有的数据集,显然你可能想用set写出一个新的数据集并首先测试结果。

data have; 
input string $ 30.; 
datalines; 
Hell_TRIAL21_o World 
Good Mor_Trial9_ning 
; 
run; 


data have; 
modify have; 
regex = prxparse('s/_.*_//'); /* identify and remove anything between 2 underscores */ 
call prxchange(regex,-1,string); 
run; 

或者要创建一个新的变量和数据集,只需用prxchange(不需要prxparse)。

data want; 
set have; 
new_string = prxchange('s/_.*_//',-1,string); 
run; 
+0

谢谢! :D它适合我! – Yumi

3

文本= “Hell_TRIAL21_o世界好Mor_Trial9_ning”

var= catx("",scan(text,1,"_"),"__",scan(text,3,"_"),"_", scan(text,5,"_")) 

注意变量var的长度可能不希望您的case.Remember做出相应的调整。

+1

好的解决方案。 CATX()函数添加定界符,定义在第一个位置,也删除前导和尾随空白。 因此,如果你不需要任何分隔符,你应该使用CATS()函数,而不是将分隔符定义为“”。 还记得猫的功能(cat catt猫catx)有200作为标准长度。无论如何Yumi,你可以通过几种方式达到同样的效果。 查看sas中字符串函数的完整列表。 – stat

+1

谢谢你的注意 – yukclam9

相关问题