如何使用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
相关产品推荐
相关产品推荐

