2014-09-22 71 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