2016-08-29 5 views

答えて

1

ただ、正規表現で追加の解決策を共有したい:

data have; 
input x; 
datalines; 
1 
11 
12 
111 
1111 
1121 
99999999 
9999990 
; 
run; 

data want; 
set have; 
if PRXMATCH("/\b1+\b|\b2+\b|\b3+\b|\b4+\b|\b5+\b|\b6+\b|\b7+\b|\b8+\b|\b9+\b|\b0+\b/",x); 
run; 
2

私はこのようなものとなるだろう。

SASは数字に先行する0を格納しないので、あなたの例の最後のものは合格します - 0は表示されません。

これは数字を文字列に変換し、文字列内の個々の文字を比較します。必要に応じてput文の書式を変更します。

.が数値と比較されるため、小数点は失敗します。これらを渡す必要がある場合は、文字列から.を削除します。

data have; 
input x; 
datalines; 
1 
11 
12 
111 
1111 
1121 
99999999 
09999999 
1.11 
; 
run; 

data test; 
set have; 
pass = 1; 
format temp $32.; 
temp = strip(put(x,best32.)); 
do i=1 to length(temp)-1; 
    pass = pass and (substr(temp,i,1) = substr(temp,i+1,1)); 
    if ^pass then leave; 
end; 
drop temp i; 
run; 
+0

あなたがスペースに小数を変換し、圧縮して10進数のエラーを回避することができます:一時=湿布(tranwrd(ストリップ(PUT(X、 best32。)))、 "。"、 "")); – superfluous

+0

無意味な最後の例を修正しました。 – TechnoCore

+0

@TechnoCoreでは、上記のコードで正しく失敗します。これがあなたの質問に答えるなら、答えを受け入れてください。 – DomPazz

関連する問題