【问题标题】:SAS do loop for testing covariance structers in PROC MIXED and saving/appending outputsSAS 循环用于测试 PROC MIXED 中的协方差结构并保存/附加输出
【发布时间】:2021-12-05 02:06:06
【问题描述】:

我正在 SAS 中进行重复测量分析,并且正在比较协方差结构信息标准的差异。我不是只做每一个单独的分析,而是寻找一种方法来循环它们并将输出保存到一个表中。

这是数据样本;

Data dta;
input A Subject B Y;
datalines;
1 1 1 3
1 1 2 4
1 1 3 7
1 1 4 7
1 2 1 6
1 2 2 5
1 2 3 8
1 2 4 8
2 3 1 1
2 3 2 2
2 3 3 5
2 3 4 10
2 4 1 2
2 4 2 3
2 4 3 6
2 4 4 10
;
run;

ods output InfoCrit = Output;
proc mixed data=dta ic covtest ;
 class A Subject B;
 model Y = A B A*B/DDFM=BW S;
 Repeated B / Subject=subject Type=CS;
run;

我想用 AR(1)、ARH(1)、CS、CSH、HF、TOEP 和 UNR 循环遍历重复测量部分中的 Type=。下面是 Type=CS 的输出。

Neg2LogLike     Parms   AIC     AICC    HQIC    BIC     CAIC
23.3                2   27.3    29.7    24.6    26.1    28.1

我还想为 do-loop 的每次迭代添加一个新的类型列;

Type    Neg2LogLike     Parms   AIC     AICC    HQIC    BIC     CAIC
CS           23.3           2   27.3    29.7    24.6    26.1    28.1
AR(1)        22.9           2   26.9    29.3    24.2    25.7    27.7

到目前为止,我已经能够使用 ods 输出来保存表,并且我已经能够手动更改 Type= 并将该输出附加到新表中,但我未能成功实现 do 循环以使其自动化。

【问题讨论】:

    标签: statistics sas mixed-models proc do-loops


    【解决方案1】:

    您可以创建一个使用空格分隔列表的宏并循环遍历它。

    %macro outputTypes(types=);
    
        %do i = 1 %to %sysfunc(countw(&types., %str( ) ));
            %let this_type = %sysfunc(scan(&types., &i., %str( ) ));
    
             ods output InfoCrit = _output_;
    
             proc mixed data=dta ic covtest ;
                 class A Subject B;
                 model Y = A B A*B/DDFM=BW S;
                 Repeated B / Subject=subject Type=&this_type.;
             run;
    
             data output_&i.;
                 length type $10.;
                 set _output_;
                 type = "&this_type.";
             run;
        %end;
    
        data all_types;
            set output_:;
        run;
    
        /* Remove temp data */
        proc datasets lib=work nolist;
            delete output_:
                   _output_
            ;
        quit;
    
    %mend;
    

    只需指定您想要的类型,它们就会自动放入proc mixed:

    %outputTypes(types=AR(1) ARH(1) CS CSH HF TOEP UNR);
    

    输出:

    type    Neg2LogLike Parms   AIC         AICC    HQIC    BIC     CAIC
    AR(1)   22.9        2       26.9        29.3    24.2    25.7    27.7
    ARH(1)  15.9        5       25.9        55.9    19.2    22.8    27.8
    CS      23.3        2       27.3        29.7    24.6    26.1    28.1
    CSH     15.3        5       25.3        55.3    18.6    22.2    27.2
    HF      15.3        5       25.3        55.3    18.6    22.2    27.2
    TOEP    22.8        4       30.8        44.2    25.4    28.4    32.4
    UNR     22.8        4       30.8        44.2    25.4    28.4    32.4
    

    使用ods select none 防止写入任何实际的ODS 图,但仍允许ods output 语句工作。使用ods select all 重新启用图表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-29
      • 2018-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      • 2021-02-13
      相关资源
      最近更新 更多