2017-08-22 56 views
1

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

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; 

但串的数目是不固定的。

感谢&问候, 桑杰

回答

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:告诉你想要的所有变量开始col和阵列中的[*]告诉SAS定义元素本身的数量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; 
+2

数组是不是绝对必要的(虽然OP提到)。你可以在原代码中加入'col:'而不是'col1-col4'。 – Longfish

+1

或者,如果因为任何原因使用数组,似乎并不需要循环呢?只是'catx(';',c [*])''? – Joe

+1

SAS中的0D0A'x是什么? – Alph