如何将Proc Freq输出的Count除以数据集总行数?不按总类计算占比
实现Proc Freq结果中Count除以数据集总行数的方法
要让Proc Freq输出的Count值除以数据集mydata的总行数(而非默认的组内占比),可以按以下步骤操作:
获取数据集总行数并存储到宏变量
先用Proc SQL计算mydata的总行数,将结果存入宏变量total_obs,方便后续调用:proc sql noprint; select count(*) into :total_obs from mydata; quit;运行原Proc Freq生成基础统计结果
执行你提供的Proc Freq代码,生成包含分组、类别和Count的数据集freqs:proc freq noprint data=mydata; by place; table weight / out=freqs; run;计算Count相对于总行数的比例
通过Data步读取freqs数据集,新增变量计算Count与总行数的比值,还可按需格式化显示为百分比:data freqs_with_total_pct; set freqs; /* 计算占比 */ pct_of_total = count / &total_obs; /* 可选:将数值格式化为百分比,保留两位小数 */ format pct_of_total percent10.2; run;
说明
- 原Proc Freq默认的百分比是基于
by place分组内的观测数计算,此方法替换为用整个数据集的总行数作为分母。 - 若需排除
weight变量有缺失的观测,可将第一步的count(*)改为count(weight),确保总行数仅统计weight非缺失的观测。
内容的提问来源于stack exchange,提问作者NewUsr_stat
相关产品推荐
相关产品推荐

