我今天早上遇到了这个问题,我仍在努力弄清楚它是否可以完成。以下数据集存在且具有字符变量CAT。
CAT
一个
AB
乙
ABCD
CB
。
。
。
等等。
如果字符串的长度大于1,我们需要编写一个SAS程序在字符串的每个字符之间引入逗号。我使用了length()函数并使用do循环来创建不同的变量它只是弄得很乱。我该如何解决这个问题?
答案 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;