SAS处理ACS普查数据时GRNTP计算值与分项求和结果不一致求助
问题原因
- 构成变量缺失值未处理
你当前的代码仅对满足判断条件的gasp2/elep2/watp2/fulp2赋值,所有未命中判断分支的观测,上述变量都会默认设为缺失值。SAS的加法规则为:只要表达式中存在一个缺失值,整个表达式的计算结果就为缺失值。
因此求和GRNTP时,只要一条观测的四个构成变量有任意一个是缺失值,这条观测就会被排除在统计范围外;但你单独求和每个构成变量时,仅会排除对应变量为缺失的观测,不会受其他变量缺失的影响。两者统计的样本量存在差异,最终总和自然不一致。 - 统计范围可能不一致
你代码最后一行的if year2 = 2019 then GRNTP;在数据步中没有实际赋值或筛选作用,如果你计算GRNTP总和时额外限定了2019年的范围,但单独求和各构成字段时没有加对应筛选,也会导致结果偏差。
修复方案
- 给所有构成变量设置初始值为0,避免未匹配条件的观测出现缺失值,简化后的赋值逻辑如下:
/* 初始化所有构成变量为0 */ gasp2=0; elep2=0; watp2=0; fulp2=0; if year2<2018 then do; if gasp>3 then gasp2=gasp; if elep>2 then elep2=elep; if watp>2 then watp2=watp; if fulp>2 then fulp2=fulp; end; else if year2>=2018 then do; if gasfp="4" then gasp2=gasp; if elefp="3" then elep2=elep; if watfp="3" then watp2=watp; if fulfp="3" then fulp2=fulp; end; GRNTP=gasp2 + elep2 + watp2/12 + fulp2/12;
- 如果你需要仅统计2019年的结果,在求和的过程步骤中统一添加筛选条件
where year2=2019;即可。 - 修复后可以用以下代码检查变量的缺失情况,确认无异常后再做加总校验:
proc means data=你的数据集名称 n nmiss sum; var gasp2 elep2 watp2 fulp2 GRNTP; run;
内容的提问来源于stack exchange,提问作者Stephen Gardner
相关产品推荐
相关产品推荐

