如何在SAS中根据length列指定的列数计算x1-x5的均值
SAS实现按指定列数计算平均值的方法
这里提供两种实用的实现方式,都能满足按length列指定的数量计算x1到xN的平均值:
方法一:数组循环求和(推荐)
利用SAS数组直接遍历目标列,代码简洁高效:
data want; set have; array x_cols[5] x1-x5; /* 定义数组覆盖x1到x5 */ total = 0; do idx = 1 to length; /* 按length指定的列数循环累加 */ total + x_cols[idx]; end; avg = total / length; drop idx total; /* 删除临时变量 */ keep ID length avg; /* 仅保留需要的列 */ run;
说明:
- 数组
x_cols对应x1到x5,通过循环索引直接调用对应列的值 - 累加完成后除以
length得到平均值,最后清理临时变量并保留目标字段
方法二:动态变量引用法
如果不想定义数组,可通过动态拼接变量名的方式实现:
data want; set have; total = 0; do idx = 1 to length; /* 动态拼接变量名,获取对应值并累加 */ total + input(vvaluex(cats('x', idx)), best32.); end; avg = total / length; drop idx total; keep ID length avg; run;
说明:
cats('x', idx)生成变量名(如x1、x2),vvaluex获取变量的字符值后转成数值- 同样通过循环累加指定列的和,再计算平均值
两种方法运行后都能得到你期望的结果,比如:
- ID为A的行:(8+234+79+36+78)/5 = 87
- ID为B的行:(8+26+589+3)/4 = 156.5
内容的提问来源于stack exchange,提问作者pakalla
相关产品推荐
相关产品推荐

