【问题标题】:SAS how concatenate variables from different observations in 1 observation by groupSAS如何按组在1个观察中连接来自不同观察的变量
【发布时间】:2014-09-23 15:37:31
【问题描述】:

我有不同地址的学生,每个观察中有 1 个,我想将所有地址放在学生的 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

我该怎么做?

【问题讨论】:

  • 字符串是否必须以任何特定顺序连接?例如,“Central Market, Dolphin 541, St Jeremy”是 Ron 可以接受的结果吗?
  • 不,但只有当我有一个学生的地址是“St Thomas,Central Market”和其他地址是“Central Market,St Thomas”时,SAS 才会采取不同的方式,即使地址是相同但落后

标签: dataset 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;

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;

如果没有地址顺序指示符,就无法在其背后创建特定的逻辑规则。

EDITED ANSWER @user3142441 非常正确,首先需要排序 - 写答案时错过了这一点。

【讨论】:

  • 嗯,这不会产生示例所需的输出。罗恩出现在两排。
  • 是的,你是对的,但我之前使用了一个按名称排序的 proc,它可以工作。
【解决方案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; 

这将连接您的姓名,但不允许重复您的数据或您需要提供更详细信息的排序

【讨论】:

    猜你喜欢
    • 2014-05-03
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 2023-01-27
    • 1970-01-01
    相关资源
    最近更新 更多