SAS做循环测试协方差结构在PROC混合和保存/追加输出



我正在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添加一个新列;

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循环来自动化它。

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

%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重新启用图形。

相关内容

最新更新