2014-09-22 72 views
0

我在每個觀察學生的不同地址,1,我希望把所有的地址在1個觀察學生SAS如何在1個觀察組串聯不同的觀察變量

我有這樣的:

data students; 
input name : $50. address $50.; 
datalines; 
Ron St Jeremy 
Ron Central Market 
Edna St Thomas 
John Av. Washington 
John St Jeremy 
Ron Dolphin 541 
; 
run; 

我想這個數據集:

Name address 
Ron St Jeremy, Central Market, Dolphin 541 
Edna St Thomas 
John Av. Washington, St Jeremy 

我怎樣才能做到這一點?

+0

字符串是否必須按任何特定順序連接?例如,「中央市場,海豚541,聖傑里米」是羅恩可以接受的結果嗎? – Jeff 2014-09-22 15:10:19

+0

不,但只有當我有一個學生在他們的地址「聖托馬斯,中央市場」和其他與「中央市場,聖托馬斯」,SAS將採取類似differents即使地址相同,但落後 – user3142441 2014-09-22 15:26:07

回答

2

會像這樣就夠了:

data students; 
input name : $50. address $50.; 
datalines; 
Ron St Jeremy 
Ron Central Market 
Edna St Thomas 
John Av. Washington 
John St Jeremy 
Ron Dolphin 541 
; 
run; 

proc sort data = students; 
      by name; 
run; 

data want; 
length cat $250.; 
    do until (last.name); 
     set students; 
     by name notsorted; 
     cat=catx(', ',cat,address); 
    end; 
    drop address; 
run; 

沒有地址順序的指標有沒有CR方式吃它背後的一個特定的邏輯規則。

EDITED ANSWER @ user3142441非常正確,首先需要排序 - 在編寫答案時錯過了這一點。

+0

它的工作原理,謝謝jj72uk,這是我所需要的 – user3142441 2014-09-22 18:18:22

+0

嗯,這不會產生示例所需的輸出。羅恩出現在兩排。 – Jeff 2014-09-22 18:43:44

+0

是的,你是對的,但我使用過程中的名稱按順序排序,它的工作原理。 – user3142441 2014-09-22 18:49:03

2

如果順序並不重要(不知道我理解您的評論),那麼你可以這樣做:

proc sort data = students out = students_srted; 
by name; 
run; 

data concat; 
set students_srted; 
by name; 
retain concat_address; 
if first.name then do; concat_address = address; end; 
    else do; concat_address = concat_address || address; end; 
if last.name then do; output; end; 
run; 

這將串連你的名字,但不進行津貼的數據或排序複製您要查詢需要提供更詳細的信息

+0

我複製並粘貼你的代碼,但它不起作用, – user3142441 2014-09-22 18:16:46