【问题标题】:Concatenate duplicate values连接重复值
【发布时间】:2014-11-28 15:33:02
【问题描述】:

我有一个包含一些变量的表,比如 var1var2 以及一个标识符,由于某些原因,一些标识符有 2 个观察值。

我想知道是否有一种简单的方法可以将相同标识符的第二个观察放回第一个观察,即

  • 而不是有两个观察值,每个观察值都具有相同标识符值的 var1 var2 变量
ID 变量 1 变量 2 ------------------ A1 12 13 A1 43 53
  • 只有一个,但有 var1 var2 var1_2 var2_2 之类的东西。
ID var1 var2 var1_2 var2_2 -------------------------------------- A1 12 13 43 53

我可能可以通过重命名我的所有变量来做到这一点,然后将表与重命名的变量合并并删除重复项,但我认为必须有一个更简单的版本。

【问题讨论】:

  • 我建议这不是一个好主意,除非有充分的理由;使用更少变量和更多观察的数据几乎总是更容易。

标签: sas


【解决方案1】:

实际上,您将值合并回来的建议可能是最好的。

如果您对任何给定 ID 最多有 1 个重复项,则此方法有效。

data first dups;
set have;
by id;
if first.id then output first;
else output dups;
run;

proc sql noprint;
create table want as
select a.id,
       a.var1,
       a.var2,
       b.var1 as var1_2,
       b.var2 as var2_2
from first as a
  left join
     dups as b
  on a.id=b.id;
quit;

【讨论】:

    【解决方案2】:

    另一种方法利用PROC TRANSPOSE 和数据步合并:

    /* 您可以通过向此数据线步骤添加更多数据来进行实验 */ 数据有; infile 数据线; 输入 ID:2 美元。变量 1 变量 2; 数据线; A1 12 13 A1 43 53 ; 跑; /* 这一步将 var1 的值放在一行 */ proc transpose data=tab out=new1 (drop=_NAME_) prefix=var1_; 按身份证; 变种变种1; 跑; /* 这对 var2 值也是如此 */ proc transpose data=tab out=new2 (drop=_NAME_) prefix=var2_; 按身份证; 变种变种2; 跑; /* 然后将两个转置的数据集合并在一起,得到一行 */ 数据需要; 合并新1新2; 按身份证; 跑;

    举个例子:

    数据选项卡; infile 数据线; 输入 ID:2 美元。变量 1 变量 2; 数据线; A1 12 13 A1 43 53 A2 199 342 A2 1132 111 A2 91913 199191 B1 1212 43214 ; 跑;

    给予:

    ID var1_1 var1_2 var1_3 var2_1 var2_2 var2_3 -------------------------------------------------- - A1 12 43 。 13 53 。 A2 199 1132 91913 342 111 199191 B1 1212。 . 43214 。 .

    【讨论】:

      【解决方案3】:

      有一种非常简单的方法,使用PROC SUMMARY 中的IDGROUP 函数。

      data have;
      input ID $ var1 $ var2 $;
      datalines;
      A1    12      13
      A1    43      53
      ;
      run;
      
      proc summary data=have nway;
      class id;
      output out=want (drop=_:)
              idgroup(out[2] (var1 var2)=);
      run;
      

      【讨论】:

        猜你喜欢
        • 2013-07-22
        • 1970-01-01
        • 2013-04-01
        • 1970-01-01
        • 2014-11-25
        • 2017-10-22
        • 2021-12-07
        • 2014-06-01
        • 2018-01-04
        相关资源
        最近更新 更多