2012-02-29 64 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定義了一個直到結束匹配。