SAS:替换SQL表

时间:2017-04-13 22:18:01

标签: 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,我只有已经使用了几个星期。我尝试过使用COMPRESS但是当我阅读更多关于它的信息时,它似乎只删除了值,所以我尝试了TRANWRD,但是从我能够弄清楚我需要为每个可能出现的字母和符号创建一个条目,即

data Work.temp;
str = b;
Alpha=tranwrd(str, "a", "9");
Alpha=tranwrd(str, "b", "9");
put Alpha;
run;

然后我研究了一些,发现了SAS replace character in ALL columns

基于我使用此代码:

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;

那只是回归:
|海峡| B |阿尔法|
| --- | - |。.------- |

(抱歉那里的格式不好,花了30分钟试图弄清楚如何让桌子看起来没有空格但却出错了。请想象 - 这是空格)

再次感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:0)

试试这个。

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;
祝你好运。

答案 1 :(得分:0)

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

 c=compress(b,,'kd');

用零填充左侧有很多方法可以做到。

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

c=put(input(c,??5.),Z5.);

您可以添加零。使用IF语句:

if length(c) < 5 then c=repeat('0',5-length(c)-1)||c ;

或使用SUBSTRN()函数。

c=substrn('00000',1,5-length(c))||c;

或者对REVERSE()函数有一些乐趣。

c=reverse(substr(reverse(cats('00000',c)),1,5));