2015-04-21 54 views
0

我正在向SAS中的數據集中輸入字符串。這是我的代碼。在SAS中輸入空格的字符串

data match; 
input string1 $1-6 
     string2 $10-15 
     string3 $18-21; 
position1=prxmatch('/^a/', string1); 
position2=prxmatch('/a$/', string2); 
position3=prxmatch('/^a.a$/', string3); 
datalines; 
abc  aba  aa 
abcde abcba abba 
abcde aaaaa a.a 
       a$a 
; 
run; 

正如你可能會注意到,第一列abcde開始與空間的最後一排。此外,第二列aaaaa的最後一個字符串也以空格結束。除了這兩個,其他的字符串只是他們是誰。

我正在使用prxmatch進行正則表達式匹配。所以prxmatch('/^a/', ' abcde')應該返回我0,prxmatch('/a$/', 'aaaaa ')也應該返回我0。

但是,結果是這樣的:

System Results

所以,我應該怎麼做才能輸入這些字符串正確,得到正確的正則表達式匹配的結果?

回答

4

您可以使用$CHARw.信息來讀取初始空格。我喜歡@pos以這種方式爲:

data match; 
input @1 string1 $char6. 
     @10 string2 $char6. 
     @18 string3 $char4.; 
    position1=prxmatch('/^a/', string1); 
    position2=prxmatch('/a$/', string2); 
    position3=prxmatch('/^a.a$/', string3); 
datalines; 
abc  aba  aa 
abcde abcba abba 
abcde aaaaa a.a 
       a$a 
; 
run; 

我認爲,現在返回你所期望的。 (?你可能打算STRING3到只有3米寬)

+0

STRING3有4個廣,從18到21 。'position'運行良好,然而'position2'和'position3'不能按我的需要工作。他們都返回0. –

+0

我添加了一個'trim()',但第二列中的最後一個仍然不能正常工作。 –

+0

第二欄最後一個字是什麼意思?你的意思是「aaaaa」? – Joe

0

如果你想允許的開頭或每個支柱的前端的空白,使用\s*

position1=prxmatch('/^\s*a/', string1); 
position2=prxmatch('/a\s*$/', string2); 
position3=prxmatch('/^a.a$/', string3); 
相關問題