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

如何使用SAS二维数组统计字符变量行内的缺失值?

用SAS二维数组统计每行字符变量的缺失值数量

没问题,针对你这个需求,我整理了完整的SAS代码,还会帮你拆解关键部分,确保你能理解每一步的作用:

完整代码示例

假设你的原始数据集名为have,日期类变量是date1、date2、date3,城市类变量是city1、city2、city3(如果你的变量名不同,直接替换即可):

data want;
    set have;
    /* 定义二维数组:2行(日期类/城市类)、3列(每类的3个变量),指定字符型$ */
    array char_vars[2, 3] $ date1-date3 city1-city3;
    /* 初始化缺失值计数器 */
    total_missing = 0;
    /* 双重循环遍历二维数组的每个元素 */
    do i = 1 to 2;          /* 遍历两类变量(行) */
        do j = 1 to 3;      /* 遍历每类里的单个变量(列) */
            /* 判断当前变量是否为字符缺失值'NA' */
            if char_vars[i, j] = 'NA' then total_missing + 1;
        end;
    end;
    /* 可选:如果需要分别统计两类的缺失数,可以加这两个变量 */
    date_missing = 0;
    city_missing = 0;
    do j = 1 to 3;
        if char_vars[1, j] = 'NA' then date_missing + 1;
        if char_vars[2, j] = 'NA' then city_missing + 1;
    end;
    /* 不需要保留循环变量i、j的话可以删掉 */
    drop i j;
run;

关键部分解释

  • 二维数组定义:array char_vars[2, 3] $ date1-date3 city1-city3; 这里的[2,3]表示2行3列的数组,第一行对应日期类变量date1-date3,第二行对应城市类变量city1-city3,$声明这是字符型数组。
  • 缺失值判断:因为你的缺失值是字符型的'NA',不是SAS默认的系统缺失值.,所以直接用char_vars[i,j] = 'NA'来判断(如果有大小写不一致的情况,比如'na',可以改成upcase(char_vars[i,j]) = 'NA'统一判断)。
  • 计数器累加:total_missing + 1是SAS里简化的累加写法,等价于total_missing = total_missing + 1。

灵活调整技巧

  • 如果你的变量名不是连续命名(比如日期类是reg_date、order_date、ship_date),可以直接把变量名逐个列在数组里:array char_vars[2,3] $ reg_date order_date ship_date beijing shanghai guangzhou;
  • 如果想统计所有字符变量的缺失值(不管分类),也可以用一维数组array char_vars[6] $ _character_;,不过你要求用二维数组,所以上面的分类写法更贴合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:32:10