SAS大型机将20..99更换为200099

SAS大型机将20..99更换为200099,sas,Sas,在我的sas大型机代码中,如何替换。用0 data newlic; INPUT @1 LICNO $10.; DATALINES; 203....412 ...3300421 9955..032. ; RUN; PROC PRINT DATA = NE

在我的sas大型机代码中,如何替换。用0

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;