用于Concatinating字符串的{s}中的数组

时间:2017-08-22 12:41:30

标签: sas sas-macro

我有一个带有名称和字符串的数据,我想将所有字符串(col1,col2等)添加到一列中。 字符串的数量不固定,有时可能或多或少。 我可以用catx做到这一点,但不知道如何用数组实现这一点。 以下是我的数据集。请指南。

data a;    

    input name$  col1$ col2$ col3$ col4$;

DATALINES;
Harry abc dcd vgd bvd
peter cvc fgf ghg ghh
John fgg ftg uty gfdg
sheyala fgf jty fhf fgr
;
run;

这是我的代码:

data test;
length result $50;
set a;
result=Compress(catx(';',of col1-col4),'0D0A'x);
run;

但是字符串的数量并不固定。

谢谢&问候, 桑杰

1 个答案:

答案 0 :(得分:0)

您可以定义具有未确定数量的元素的数组。这假设您的所有列都以col开头。

data test;
length result $50;
set a;
array c[*] col:;

result = "";
do i=1 to dim(c);
    result = Compress(catx(';',result,c[i]),'0D0A'x);
end;
drop i;
run;

col:告诉SAS您希望所有以col开头的变量和数组中的[*]告诉SAS定义元素本身的数量。使用dim()函数获取该数字并循环显示值。

修改

如评论中所述,以下方法也有效。

不使用数组:

data test;
length result $50;
set a;

result = Compress(catx(';',of col:),'0D0A'x);

run;

或者如果你还想要数组:

data test;
length result $50;
set a;
array c[*] col:;

result = Compress(catx(';',of c[*]),'0D0A'x);
run;