【问题标题】:one to many merge in SAS to complete linesSAS中的一对多合并以完成行
【发布时间】:2017-05-23 12:22:28
【问题描述】:

我正在努力合并统计程序 SAS,希望你们能帮助我:

我有想要加入的数据集 看起来像这样:

输入:

 id |var1 |var2 |var3 |var4 |Var5
>--------------------------------<
 1  |A1   |B1   |C1   | --  | 0  | 
 1  |A2   |B2   |--   | D2  | 1  |

想要的输出:

 id |var1 |var2 |var3 |var4 |Var5
 >--------------------------------<
 1  |A1   |B1   |C1   |   D2|   0|
 1  |A2   |B2   |C1   |   D2|   1|

我尝试通过 if "Var5=0/1 then delete" 将数据集一分为二 语句,然后将它们合并在一起,例如: 数据示例1

 id |var1 |var2 |var3 |var4 |Var5
>----------------------------<
1   |A1   |B1   |C1   | -- | 0|

数据示例2

 id |var1 |var2 |var3 |var4 |Var5

 >--------------------------------<

 1| A2    | B2  |--   |  D2|    1|

合并代码:

 data Example12;
 merge example1 (IN=X) example2;
  by persnr;
  IF x=1;
run;

但这会导致类似:

id |var1 |var2 |var3 |var4 |Var5 1|A1 |B1 |C1| D2| 0| 1|A1 |B1 |C1| D2| 0|

非常感谢任何帮助。

【问题讨论】:

  • 这是一个纯粹的 SAS 问题,尽管我们这里的许多人都知道 SAS,但这与本网站无关。合并可能很棘手。迁移到 StackOverflow。他们应该回答这样的问题。

标签: panel-data sas


【解决方案1】:

如果每个 ID 只有一条记录具有 VAR3 或 VAR4 的非缺失值,那么您可以使用数据集选项设置一对多合并,以获得 VAR3 和 VAR4 的值合并到该 ID 的所有行中。

首先让我们设置您的示例数据:

data have ;
  input (id var1-var4) ($) var5 ;
cards;
1 A1 B1 C1  . 0
1 A2 B2  . D2 1
;

现在尝试合并:

data want ;
  merge have(drop=var3 var4)
        have(keep=id var3 where=(not missing(var3)))
        have(keep=id var4 where=(not missing(var4)))
  ;
  by id;
run;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    • 2016-09-07
    • 2017-08-28
    • 2017-07-10
    相关资源
    最近更新 更多