找回密码
 注册
查看: 8417|回复: 2

SAS BASE tip (1) -- 多对一merge 有共同变量--需事先drop共同变量

[复制链接]
发表于 2010-5-15 23:40:20 | 显示全部楼层 |阅读模式
本帖最后由 Ella 于 2010-5-15 23:44 编辑

【背景】实际操作中经常会遇到这样的问题:
1)多对一merge
2)被merge的数据集带有相同的变量:
      a) 明确知道数据集中的某个变量所携带的信息是错的或者是旧的, 并且需要从其它数据集来更新该数据集中该变量的信息。
      b) 在不了解数据的情况下,merge数据集带有相同变量名的变量。

      假如有 AE(Adverse Event) 和 DM(Demographic)两个数据集,他们可以通过变量ID连接在一起。AE 可能同一ID 有多条记录。DM通常每一个ID只有一条记录。假设两个数据集中都收集到 X 变量,且该变量在AE中的值需要从DM来更新,或者因为其它任何原因需要和DM进行merge,而没有注意到X同时存在于两个数据集中。这样就满足了以上1 和 2 两个条件。

【问题】 如果不事先drop掉AE中的X变量,直接merge AE DM;,就会导致 X 的部分信息来自于AE,部分信息来自于DM。产生不应该有的错误。

【例子】:如下代码,请自行运行查看结果。X的值在第一条记录为From AE,在第二条为From DM。这个结果通常不是我想要的。
  1. data ae;
  2. length id x $10;
  3. id='101';
  4. x='From AE';
  5. output;
  6. id='101';
  7. x='From AE';
  8. output;
  9. run;
  10. data dm;
  11. length id x $10;
  12. id='101';
  13. x='From DM';
  14. run;

  15. data c;
  16. merge ae dm;
  17. by id;
  18. proc print;run;
复制代码

将代码改为如下代码,即可得到正确的X,X的值全部为From DM。

  1. data c;
  2. merge ae(drop=x) dm;
  3. by id;
  4. proc print;run;
复制代码


【结论】: 多对一merge, 需要事先查看数据集中有无共同变量,如果有,可能需要事先drop掉某个数据集中的共同变量,以防止出错。




回复

使用道具 举报

发表于 2010-5-15 23:50:40 | 显示全部楼层
抢个沙发。哈哈
回复 支持 反对

使用道具 举报

发表于 2010-5-22 14:37:52 | 显示全部楼层
proc append base=ae data=dm;
run;

不过看这个题目都晕了
不晓得是撒子意思
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-12-4 00:59 , Processed in 0.024982 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表