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

SAS新手求助:%JK语句无法识别,如何关联结果A、B做对比

解决SAS数据集对比及自定义宏识别问题

一、先搞定%JK宏无法识别的问题

SAS报%JK未定义,说明这是团队内部写的自定义宏,你没加载它的定义代码:

  • 找写这个宏的同事要对应的宏定义文件(一般是.sas格式),用%include "宏文件的完整路径";加载后再调用%JK。
  • 如果找不到宏文件,直接跳过它,用SAS原生功能就能完成数据集对比,不用依赖这个宏。

二、手动实现结果A和结果B的关联对比

你的核心需求是对比两个数据集的分数字段,推荐两种实用方法:

方法1:合并数据集后计算差异(适合自定义逻辑)

假设你用%include生成的结果A数据集叫ResultA,结果B是JK.ResultsB,两个数据集有唯一关联字段(比如用户IDID),步骤如下:

/* 先按关联键排序,MERGE要求数据集按关联键有序 */
proc sort data=ResultA;
    by ID;
run;

proc sort data=JK.ResultsB;
    by ID;
run;

/* 合并数据集,计算差异并标记匹配状态 */
data Parity;
    merge ResultA(in=a) JK.ResultsB(in=b);
    by ID;
    /* 只保留两个数据集都存在的记录 */
    if a and b;
    /* 计算分数差:注意字段名有空格的话要写成'Calculated Score'n */
    Parity = Automated_Score - 'Calculated Score'n;
    /* 标记是否完全匹配 */
    ScoreMatch = (Parity = 0); /* 简化写法:条件为真时赋值1,假则0 */
run;

方法2:用PROC COMPARE快速对比(省心高效)

SAS自带的PROC COMPARE是专门做数据集对比的工具,能自动生成差异统计,不用手动写逻辑:

proc compare base=ResultA compare=JK.ResultsB out=Compare_Details;
    /* 指定要对比的字段,不指定则对比所有同名字段 */
    var Automated_Score 'Calculated Score'n;
    /* 指定关联键,确保对应记录一一匹配 */
    by ID;
run;
  • 运行后日志会打印整体对比结果(比如多少条记录匹配、多少字段有差异),输出的Compare_Details数据集会包含每条记录的具体差异情况。

三、关于你原代码的说明

你原代码里的Set ScoreMatch;依赖%JK宏生成的数据集,宏加载失败自然找不到这个表。用上面两种方法可以直接绕开这个宏,完成对比需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:25:22