如何将字符串修改为字符值,其中字符串的每个字符用逗号分隔?

时间:2013-08-16 19:38:41

标签: sas

我今天早上遇到了这个问题,我仍在努力弄清楚它是否可以完成。以下数据集存在且具有字符变量CAT。

CAT
一个
AB

ABCD
CB
。 。 。 等等。

如果字符串的长度大于1,我们需要编写一个SAS程序在字符串的每个字符之间引入逗号。我使用了length()函数并使用do循环来创建不同的变量它只是弄得很乱。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

正则表达式解决方案:

data have;
input CAT $;
datalines;
A
AB
B
ABCD
CB
;;;;
run;

data want;
set have;
cat_c = prxchange('s/(?<=[[:alpha:]])([[:alpha:]])/,$1/io',-1,CAT);
put cat_c=;
run;

第一个括号组是alpha字符的后视;然后是捕获的alpha字符。然后用逗号和字符替换。如果你想要[[:alpha:]]以外的东西(即A-Z),那就把它作为一个类提供。

使用length和do循环的解决方案并不坏,老实说,如果你想要一些对新手程序员更具可读性的东西。只需使用等号左边的SUBSTR。

data want2;
set have;
if length(cat) > 1 then 
  do _t = 1 to length(cat)-1;
    substr(cat_c,2*_t-1,2)=substr(cat,_t,1)||',';
  end;
substr(cat_c,2*length(cat)-1,1)=substr(cat,length(cat),1);
put cat_c=;
run;