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

SAS技术问题:如何标记列序列中PB/MB后含其他值的记录

SAS数据集标记解决方案

现有数据集

data have;
    length col1-col10 $2.;
    input col1-col10;
    datalines;
PM MM JM MM PM MM MM PB . .
MM JM PM MB . . . . . .
MM MM PM JM PB MM . . . .
PM PM PM MM MB MM JM . . .
;
run;

需求说明

标记所有在列序列中出现PB或MB之后,仍存在非PB、非MB且非缺失值的记录。

期望输出

Flag
PM MM JM MM PM MM MM PB . .  0
MM JM PM MB . . . . . .      0
MM MM PM JM PB MM . . . .    1
PM PM PM MM MB MM JM . . .   1

解决方案代码

data want;
    set have;
    array cols[*] col1-col10;
    flag = 0;
    /* 定位第一个PB/MB的出现位置 */
    do i = 1 to dim(cols);
        if cols[i] in ('PB', 'MB') then do;
            /* 检查该位置之后的所有列 */
            do j = i+1 to dim(cols);
                if cols[j] not in ('PB', 'MB', '.') then do;
                    flag = 1;
                    leave; /* 找到符合条件的值后直接终止循环 */
                end;
            end;
            leave; /* 找到第一个PB/MB后停止向前遍历 */
        end;
    end;
    drop i j;
run;

/* 打印验证结果 */
proc print data=want noobs;
run;

逻辑说明

  • 用数组cols批量处理所有列,简化遍历操作;
  • 先找到第一条PB或MB的位置,避免重复检查;
  • 从该位置的下一列开始校验,只要发现符合条件的非目标值,立即标记flag=1并退出循环,提升效率;
  • 若PB/MB之后没有有效非目标值,flag保持初始值0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 14:45:18