You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Proc Compare生成仅含差异观测及对应BASE/COMPARE的输出数据集

解决SAS Proc Compare输出差异观测对应三行记录的问题

实现思路

  1. 借助proc compare的outall参数生成包含所有观测(BASE、COMPARE、DIF行)的完整对比数据集,保留系统生成的差异标识变量。
  2. 先筛选出存在差异的ID列表,再基于该列表提取对应ID的DIF、BASE、COMPARE行,排除无差异的观测。

具体代码

1. 生成完整对比数据集

proc compare base = pre_upd.pre_update 
             compare = post_upd.post_update 
             out = temp.full_compare 
             outall  /* 保留每组观测的BASE/COMPARE/DIF三行记录 */
             outnoequal; /* 生成差异标记变量 */
    id subj_recpos;
run;

2. 筛选差异ID并提取目标行

/* 提取所有存在差异的subj_recpos */
proc sql noprint;
    create table temp.diff_ids as
    select distinct subj_recpos
    from temp.full_compare
    where _type_ = 'DIF' and _ok_ = 0; /* _ok_=0代表该ID存在变量差异 */
quit;

/* 仅保留有差异ID对应的三行记录 */
data results.final_results;
    merge temp.full_compare temp.diff_ids;
    by subj_recpos;
    if not missing(subj_recpos);
run;

关键说明

  • outall是核心参数:它会让proc compare为每个对比ID输出三条记录,分别通过_type_变量标记为BASE(基准数据集行)、COMPARE(对比数据集行)、DIF(差异计算行)。
  • _ok_变量用于判断差异:_ok_=1表示该ID下所有变量均无差异,_ok_=0表示存在至少一个变量差异。
  • 通过两步筛选,既保留了差异ID的完整三行记录,又彻底排除了无差异的观测(如示例中的ID_02)。

内容的提问来源于stack exchange,提问作者morgandow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 17:17:40