我今天早上遇到了这个问题,我仍在试图弄清楚它是否可以完成。存在以下数据集并具有字符变量 CAT。
CAT
A
AB
B
ABCD
CB
。. . 等等。
如果字符串的长度大于 1,我们需要编写一个 SAS 程序来在字符串的每个字符之间引入逗号。我使用了 length() 函数并使用了一个 do 循环来创建不同的变量,结果变得很乱。我该如何解决这个问题?
我今天早上遇到了这个问题,我仍在试图弄清楚它是否可以完成。存在以下数据集并具有字符变量 CAT。
CAT
A
AB
B
ABCD
CB
。. . 等等。
如果字符串的长度大于 1,我们需要编写一个 SAS 程序来在字符串的每个字符之间引入逗号。我使用了 length() 函数并使用了一个 do 循环来创建不同的变量,结果变得很乱。我该如何解决这个问题?
正则表达式解决方案:
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:]] 以外的其他内容(即 AZ),则将其作为一个类提供。
老实说,如果您想要一些对新手程序员来说更具可读性的东西,那么使用 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;