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

如何在SAS数据集中横向排查并标记PB/MB后的非缺失值

SAS数据集记录标记问题

问题背景

现有SAS数据集Have:

data Have;
input col1 $ col2 $ col3 $ col4 $ col5 $ col6 $ col7 $ col8 $ col9 $ col10 $;
cards;
PM MM JM MM PM PB . . PM .
PM MM JM MM PM PB JM . . .
PM MM JM MM PM MB PM MM . .
PM MM JM MM PM PM MB . .
PM MM JM MM PM PM PB . .
;

需求:横向排查每条记录,若PB或MB之后存在任意非缺失值,则标记该记录的flag为1,否则为0。预期输出如下:

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

解决方案

以下SAS代码可实现需求:

data Want;
    set Have;
    flag = 0;
    array cols[*] col1-col10;
    do i = 1 to dim(cols);
        if cols[i] in ('PB', 'MB') then do;
            do j = i+1 to dim(cols);
                if not missing(cols[j]) then do;
                    flag = 1;
                    leave;
                end;
            end;
            leave;
        end;
    end;
    drop i j;
run;

逻辑说明

  • 通过数组cols将所有待检查变量整合,简化循环操作。
  • 外层循环遍历变量,定位第一个出现PB或MB的位置。
  • 内层循环从该位置的下一个变量开始检查,一旦发现非缺失值,立即将flag设为1并终止所有循环,减少不必要的计算。
  • 最后删除临时变量i和j,保持数据集整洁。

内容的提问来源于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 17:47:21