如何仅用SAS Data Step计算sashelp.class的年龄统计指标
使用SAS Data Step计算sashelp.class中年龄的统计量
需求:仅通过SAS Data Step,计算sashelp.class数据集中age字段的最小值、最大值、总和以及平均值。
实现代码
/* 初始化统计变量并保留其值 */ data age_stats; retain age_min age_max age_sum 0; set sashelp.class end=eof; /* 累加年龄总和 */ age_sum + age; /* 更新最小值:首次赋值或当前年龄更小则替换 */ if _n_ = 1 then age_min = age; else if age < age_min then age_min = age; /* 更新最大值:首次赋值或当前年龄更大则替换 */ if _n_ = 1 then age_max = age; else if age > age_max then age_max = age; /* 最后一行计算平均值并输出统计结果 */ if eof then do; age_avg = age_sum / _n_; output; end; /* 只保留统计变量,丢弃原始数据列 */ keep age_min age_max age_sum age_avg; run; /* 打印结果 */ proc print data=age_stats noobs; run;
代码说明
retain age_min age_max age_sum 0:确保统计变量在Data Step循环中保留上一次迭代的值,不会被重置为缺失。set sashelp.class end=eof:end=eof会在读取到最后一行数据时将eof变量设为1,用于触发最终的统计计算。age_sum + age:SAS Data Step中简化的累加写法,等价于age_sum = age_sum + age。- 首次读取数据时(
_n_=1)初始化最小、最大值,后续每行数据对比更新。 - 最后一行用总行数
_n_计算平均值,输出统计结果。 keep语句只保留需要的统计字段,避免冗余。
运行结果
执行代码后,age_stats数据集会输出以下统计结果:
| age_min | age_max | age_sum | age_avg |
|---|---|---|---|
| 11 | 16 | 253 | 13.315789 |
内容的提问来源于stack exchange,提问作者Dheeraj singh
相关产品推荐
相关产品推荐

