Replace SAS:替换SQL表中的非数字字符

Replace SAS:替换SQL表中的非数字字符,replace,sas,Replace,Sas,我有一张类似于此的桌子: A | B 1234|A1B2C 1124|$1n7 1342|*6675 1189|966 我需要创建一个C列,其中它从B列获取数据,并用“9”替换所有非数字字符,并通过在前面添加0使每个字符长5个字符。结果应该是这样的: 91929 09197 96675 00966 任何帮助都将不胜感激,谢谢 编辑:很抱歉第一次在这样的论坛上发帖,我有点超前了,我使用SQL创建了这个表,从其他3个表中提取数据,并且比SAS更熟悉SQL,我只使用了几

我有一张类似于此的桌子:

  A |  B   
1234|A1B2C   
1124|$1n7   
1342|*6675   
1189|966
我需要创建一个C列,其中它从B列获取数据,并用“9”替换所有非数字字符,并通过在前面添加0使每个字符长5个字符。结果应该是这样的:

91929
09197
96675
00966

任何帮助都将不胜感激,谢谢

编辑:很抱歉第一次在这样的论坛上发帖,我有点超前了,我使用SQL创建了这个表,从其他3个表中提取数据,并且比SAS更熟悉SQL,我只使用了几个星期。我曾经尝试过使用COMPRESS,但当我读到更多关于它的信息时,它似乎只删除了值,所以我尝试了TRANWRD,但从我能够发现的情况来看,我需要为可能出现的每个字母和符号创建一个条目,即

data Work.temp;
str = b;
Alpha=tranwrd(str, "a", "9");
Alpha=tranwrd(str, "b", "9");
put Alpha;
run;
于是我又研究了一些,发现

基于此,我使用了以下代码:

data temp;
   set work.temp;

   array vars [*] _character_;

   do i = 1 to dim(vars);
      vars[i] = compress(tranwrd(vars[i],"a","9"));
   end;

   drop i;
run;
刚刚返回:
|Str|B|Alpha|
|---.|-.|-------|

(很抱歉这里的格式设置不好,花了30分钟试图找出如何使表格看起来正确,但结果总是错误。请想象-,是空格)

再次感谢您的帮助,谢谢

试试这个

data test;
input var1 $5.;
datalines;
A1B2C
$1n7
*6675
966
;
run;

data test1;
set test;
length var2 $5.;
regex = prxparse ("s/[^0-9|\s]/9/"); /*holds the regular expression you want to use to substitute the non-number characters*/
var2 = prxchange (regex, -1, var1); /*use this function to substitute all instances of the pattern*/
var3 = put (input (var2, best5.), z5.); /*use input and put to pad the front of the variable with 0s*/

run;

祝你好运。

只保留数字很简单。使用COMPRESS()函数上的修饰符

 c=compress(b,,'kd');
c=substrn('00000',1,5-length(c))||c;
c=reverse(substr(reverse(cats('00000',c)),1,5));
用零填充左边有很多方法可以做到这一点

您可以将数字转换为数字,然后使用Z格式将其写回字符串

c=put(input(c,??5.),Z5.);
你可以加上零。使用IF语句:

if length(c) < 5 then c=repeat('0',5-length(c)-1)||c ;
或者使用REVERSE()函数来获得一些乐趣

 c=compress(b,,'kd');
c=substrn('00000',1,5-length(c))||c;
c=reverse(substr(reverse(cats('00000',c)),1,5));

你需要发布你尝试约会的内容。翻译或压缩函数。SQL与这个问题有什么关系?