【问题标题】:How to iteratively run a SAS procedure with different subsets of data?如何使用不同的数据子集迭代运行 SAS 过程?
【发布时间】:2020-04-03 01:54:08
【问题描述】:

我想使用现有 SAS 数据集的不同子集重复运行 PROC REG。这是一个简单的示例数据集:

DATA data_main;
  input trt depth year response;
  cards;
1 1 2014 1.1
1 2 2014 1.2
2 1 2014 1.3
2 2 2014 1.4
1 1 2013 2.2
1 2 2013 2.4
2 1 2013 2.6
2 2 2013 2.8
;
run;

对于 trt 和 depth 的每个组合,我想运行这个过程,其中current_datatrtdepth 的当前组合:

PROC REG data = current_data;
    model response = year;
run;

我想在一个数据集或文本文件中捕获所有迭代的回归系数和 p 值。

在我的实际数据集中,输入和 trt 的级别数要多得多,所以我试图避免手动编码每个组合。有人可以向我解释如何做到这一点吗?

【问题讨论】:

  • 按 TRT 深度;并在 proc 语句上使用 OUTEST=。
  • @data_null_ 谢谢——太好了。我太难了。
  • 您还可以使用ODS table parameterestimates=want; 获取带有 p 值的参数估计值表。
  • @data_null_ 你为什么一直在 cmets 中发布答案?

标签: sas


【解决方案1】:

考虑运行一个宏迭代 trtdepth 的组合。下面的嵌套循环迭代地重新创建current_data 数据集,并在输出相应结果表的回归过程中使用它。根据需要为所有组合调整循环限制中的值范围:

%macro loopregression;
%do j = 1 %to 2;                 * TRT VALUES;
    %do i = 2013 %to 2014;       * DEPTH VALUES; 
        DATA current_data; 
            SET data_main;  
            if trt = &j;    
            if depth = &i;
        run;

        PROC REG data = current_data noprint outest=results&i&j;;
            model response = year;
        run;
    %end;
%end;
%mend loopregression;

%loopregression;

【讨论】:

  • 感谢您的解释。我最初尝试使用宏观方法,但无法使其发挥作用。 Data_null_ 对我帖子的评论是最简单的解决方案,但您的回答非常有帮助,因为我也想学习如何使用宏。
猜你喜欢
  • 2010-10-08
  • 2018-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-10
  • 2021-10-04
  • 2021-09-27
  • 2016-10-27
相关资源
最近更新 更多