SAS大型机将20..99更换为200099
在我的sas大型机代码中,如何替换。用0SAS大型机将20..99更换为200099,sas,Sas,在我的sas大型机代码中,如何替换。用0 data newlic; INPUT @1 LICNO $10.; DATALINES; 203....412 ...3300421 9955..032. ; RUN; PROC PRINT DATA = NE
data newlic;
INPUT @1 LICNO $10.;
DATALINES;
203....412
...3300421
9955..032.
;
RUN;
PROC PRINT DATA = NEWLIC;
RUN;
DATA MYDATA;
SET NEWLIC;
ARRAY A(*) _NUMERIC_;
DO I=1 TO DIM(A);
IF A(I) = . THEN A(I) = 0;
END;
DROP I;
RUN;
PROC PRINT DATA = MYDATA;
RUN;
我所需的输出
2030000412
0003300421
9955000320
要求将“.”替换为0使用正则表达式将所有非字母数字字符替换为0:
s/[^0-9a-zA-Z]/0/
您可以使用prxchange()
在SAS中实现正则表达式替换
可以使用TRANSLATE()函数将不需要的字符替换为“0”。您可以使用带有d
修饰符的COMPRESS()函数查找值中存在的任何非数字字符
fixed=translate(licno,repeat('0',255),compress(licno,,'d'));
结果:
Obs LICNO fixed
1 1234567890 1234567890
2 ABC 9 0000000009
3 203....412 2030000412
4 ...3300421 0003300421
5 9955..032. 9955000320
6 123 1230000000
您可以使用正则表达式模式元字符
\D
定位非数字字符,并使用PRXCHANGE()
将其替换为0
从中的完整列表中
\d
匹配一个等同于[0]的数字字符−9]
\D
匹配任何非数字字符
例如:
data have; input
licno $char10.; datalines;
1234567890
ABC 9
203....412
...3300421
9955..032.
123
;
data want;
set have;
fixed = prxchange('s/\D/0/', -1, licno);
run;
您好Stu Sztukowski,感谢您对代码的快速响应,代码运行良好,但我的主要要求是对任何非数字的人,如空间/垃圾/租船人,如果他们想替换为0,那么要求是,如果许可证不是数字,请不要异常终止,而是将值替换为0。您好Tom,感谢您的快速响应,您的代码是exlent,但我得到一个错误15修复=翻译(LICNO,REPEAT('0',255),压缩(LICNO,,'D');错误:压缩的空参数无效。请共享上述问题的一些解决方案。请为上述问题提供一些解决方案。谢谢&Krishna您是否尝试在SQL代码中使用它?你可以把数字打出来<代码>压缩(LICNO,'0123456789')感谢并问候奎师那
data have; input
licno $char10.; datalines;
1234567890
ABC 9
203....412
...3300421
9955..032.
123
;
data want;
set have;
fixed = prxchange('s/\D/0/', -1, licno);
run;