2012-02-29 66 views
2

我的原始数据中提取数值为形式使用SAS

Var 
12 A+ 
14 A+ 
AB+ 19 
AB:20 
20 
25 
27 New 

我只想提取它的数字部分。

任何人都可以请帮助我如何在sas中处理这些数据。

预先感谢您。 RGDS。

回答

6

您可以使用COMPRESS函数,该函数形式

COMPRESS(<source><, chars><, modifiers>) 

更新: 有很多种方法来实现这一目标。按照他们的意见,RWill和Keith提供最佳解决方案:

var2=input(compress(var,compress(var,,"d")),best.); 

甚至更​​好:

var2=input(compress(var,,"kd"),best.); 
+2

一种变化是在另一个压缩函数中使用嵌入压缩函数,其中嵌入压缩函数删除所有差异,并将其用作第二个压缩函数的修改器(删除除这些数字以外的所有字符)。例如: var2 = compress(var ,, compress(var ,,“d”)); – RWill 2012-03-01 01:14:41

+0

RWill - 这是一个很好的解决方案。我已经更新了答案。 – DavB 2012-03-01 07:44:09

+2

更简单的方法是添加“k”修饰符,该修饰符保持列出的字符而不是删除它们。所以代码如下所示:var2 = input(compress(var ,,“kd”),best。); – Longfish 2012-03-01 11:16:03

0

我会使用内置于SAS的正则表达式函数。首先将整行读入为字符变量,然后使用prxmatch或其他正则表达式函数之一来使用\d通配符仅提取数字组件。

3

正如@itzy上面提到的,Perl的正则表达式会做轻松:

var2=prxchange("s/[^0-9]//",-1,var); 

这将删除所有非数字字符。 在本声明中,'s /'开始一个字符串,[^ 0-9]表示所有非数字字符。 -1定义了一个直到结束匹配。