如何在SAS中用Do循环结合Proc Power计算不同功效的样本量?
批量计算不同功效值对应的样本量(SAS实现)
要批量遍历0.8到0.95、步长0.01的功效值并计算样本量,同时保存结果,用SAS的宏循环就能实现。以下是完整代码:
/* 定义宏,实现循环计算并保存结果 */ %macro calc_power_range; /* 创建空数据集用于存储所有结果 */ data power_results; length alpha power p1 p2 ntotal 8; stop; run; /* 循环遍历功效值,步长0.01 */ %do i = 0 %to 15; /* 计算当前功效值:0.8 + 0.01*i */ %let current_power = %sysevalf(0.8 + 0.01*&i); /* 单次功效值的样本量计算,输出结果到临时数据集 */ proc power; twosamplefreq test=pchi groupproportions = (0.16 0.11) sides=1 nullproportiondiff=0 alpha = 0.0249 power = ¤t_power ntotal = . out=temp_result; /* 输出当前结果到临时表 */ run; /* 将临时结果追加到总数据集 */ proc append base=power_results data=temp_result force; run; %end; /* 查看最终合并后的结果数据集 */ proc print data=power_results noobs; var alpha power p1 p2 ntotal; format power 6.2 ntotal 8.; run; %mend calc_power_range; /* 调用宏执行计算 */ %calc_power_range;
关键代码说明
- 宏循环处理小数步长:SAS的
%do默认只支持整数循环,因此用%sysevalf计算每次的功效值(0.8、0.81...0.95) - 结果保存与合并:先创建空的总数据集
power_results,每次计算的结果输出到临时表temp_result,再用proc append追加到总表 - 结果格式化:最后用
proc print查看结果时,对功效值和样本量设置格式,让输出更清晰
运行完宏后,power_results数据集就包含了你需要的所有字段:alpha(0.0249)、power(遍历的功效值)、p1(0.16)、p2(0.11)、ntotal(对应样本量)。
内容的提问来源于stack exchange,提问作者mnu
相关产品推荐
相关产品推荐

