0
如果數值僅由一種數字組成,是否有一種優雅的方式可以檢入SAS Base?檢查數值是否只包含一種數字
例子:
1 -> Yes
11 -> Yes
111 -> Yes
1111 -> Yes
1121 -> No
9999999 -> Yes
9999990 -> No
如果數值僅由一種數字組成,是否有一種優雅的方式可以檢入SAS Base?檢查數值是否只包含一種數字
例子:
1 -> Yes
11 -> Yes
111 -> Yes
1111 -> Yes
1121 -> No
9999999 -> Yes
9999990 -> No
只是想與大家分享的正則表達式的附加解決方案:
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;
我會像這樣的東西去了。
認識到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;
您可以通過小數轉換爲空間和壓縮繞過十進制錯誤:TEMP =壓縮(tranwrd(條(放(X, best32。)),「。」,「」)); – superfluous
我修改了毫無意義的最後一個例子。 – TechnoCore
@TechnoCore,在上面的代碼中可以正常失敗。如果這回答你的問題,請接受答案。 – DomPazz