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

如何在SAS EG中创建符合学期与课程号条件的0-1标记变量?

在SAS EG中实现课程重复标记需求

需求回顾

  • 学期编码规则:201801代表2018春季,201870代表2018秋季,需按**学期+课程号(CNUM)**维度判断重复
  • 标记规则:
    • CNUM为空白值→标记1
    • 同一学期内CNUM首次出现→标记1
    • 同一学期内CNUM重复出现→标记0
  • 数据已按升序排序,同一CNUM可出现在不同学期

实现方案

方法1:DATA步(BY组处理,推荐)

利用SAS的BY组自动生成的FIRST.变量,高效处理已排序的数据:

/* 替换course_data为你的实际数据集名,TERM为学期列名,CNUM为课程号列名 */
DATA course_marked;
    SET course_data;
    BY TERM CNUM;
    /* 生成标记列FLAG */
    IF CNUM = '' THEN FLAG = 1;
    ELSE IF FIRST.CNUM THEN FLAG = 1;
    ELSE FLAG = 0;
RUN;

说明:因为数据已按升序排序,BY TERM CNUM会让SAS自动识别每组的首行,FIRST.CNUM=1表示当前行是同一学期内该课程号的首次出现。

方法2:PROC SQL(窗口函数实现)

用窗口函数ROW_NUMBER()对每组数据编号,判断是否为组内首行:

PROC SQL;
    CREATE TABLE course_marked AS
    SELECT 
        *,
        CASE
            WHEN CNUM = '' THEN 1
            WHEN ROW_NUMBER() OVER (PARTITION BY TERM, CNUM ORDER BY TERM, CNUM) = 1 THEN 1
            ELSE 0
        END AS FLAG
    FROM course_data; /* 替换为你的实际数据集名 */
QUIT;

说明:PARTITION BY TERM, CNUM按学期和课程号分组,ROW_NUMBER()给每组内的行依次编号,编号为1的行即为该组首行(首次出现)。


SAS EG操作步骤

  1. 打开SAS EG,连接到你的数据源,确认目标数据集已加载
  2. 新建「程序」节点,粘贴上述任意一段代码,修改数据集名和列名匹配你的实际数据
  3. 运行程序,生成的course_marked数据集即为包含标记列的结果集

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 05:36:17