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

如何在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 = &current_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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 03:48:15