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

如何结合survey_weight按respondent_id计算调研参与率?

加权参与率计算正确性分析

你的两种计算方式本质上都是正确的,核心逻辑都是加权参与人数除以加权总人数,下面分别拆解说明:

1. PROC SURVEYMEANS 方法

proc surveymeans data=survey_data sum mean;
  strata zip_code;
  weight survey_weight;
  var participated;
  domain zip_code;
run;
  • 对于二元变量participated,proc surveymeans输出的Mean值就是你需要的加权参与率,计算逻辑为:sum(participated * survey_weight) / sum(survey_weight),完全匹配参与率的定义。
  • strata zip_code适用于抽样设计是按邮编分层的场景,如果实际抽样没有分层,去掉该语句也不影响参与率的计算结果,只是不会输出分层抽样对应的方差、标准误等统计量。
  • domain zip_code会强制按邮编分组计算,直接输出每个邮编对应的加权参与率及相关统计量。

2. PROC MEANS + DATA步方法

proc means data=survey_data sum;
  class zip_code;
  var participated survey_weight;
  weight survey_weight;
  output out=zip_summary sum(participated)=total_part sum(survey_weight)=total_survey_weights;
run;

data zip_summary;
  set zip_summary;
  participation_rate = total_part / total_survey_weights;
run;

proc print data=zip_summary;
  var zip_code participation_rate; /* 注意:原代码里的var zip是笔误,应改为zip_code */
run;
  • proc means中使用weight survey_weight时,sum(participated)实际计算的是sum(participated * survey_weight)(即加权后的参与总人数),sum(survey_weight)则是加权后的总受访人数。
  • 后续DATA步的除法计算和proc surveymeans输出的Mean结果完全一致,只是这种方法需要手动计算比率,而surveymeans会直接给出结果,同时还能提供抽样误差相关的统计量(如果抽样设计符合要求的话)。

验证小技巧

你可以抽取一个邮编下的少量样本手动计算:把该邮编下每个受访者的participated乘以survey_weight求和,再除以该邮编下所有受访者的survey_weight总和,对比两种SAS方法的输出结果,就能快速确认计算的正确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:55:23