2017-08-22 52 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