PARMS ステートメントを使用して、レベル 1 の残差分散をほぼゼロの値に固定して PROC MIXED を実行するマクロを作成しています。SAS/IML を使用して、次のような PARMS ステートメントの開始値を大量に生成しようとしています。
%macro test (dataset= , classroom= , preds= , outcome=);
proc iml;
/*count number of variables*/
%let nvars = 0;
%do %while(%qscan(&preds,&nvars+1,%str( )) ne %str());
%let nvars = %eval(&nvars+1);
%end;
/*determine location of level-1 residual in the start value vector*/
%let error_location = %eval(((&nvars*(&nvars-1))/2)+&nvars+1);
/*create vector of start values from lower triangle of identity matrix*/
start_vector = symsqr(I(&nvars));
%let starts = %str(start_vector[label=""]);
/*analyze data*/
proc mixed data=&dataset noprofile method=ml;
class &classroom;
model &outcome = &preds /noint;
random &preds /type=un sub=&classroom g;
parms
&starts
.00000001 /hold= &error_location;
run;
quit;
%mend;
このコードは、PROC MIXED コードに PARMS ステートメントがなくても正常に機能します。ただし、コードをそのまま実行すると、SAS は、IML によって生成された値をリストするのではなく、PARMS の後にリテラル文字列 'start_vector[label=""]' を配置するようです。
このエラーを回避し、SAS に START_VECTOR に含まれる値を PARMS ステートメントの開始値として指定させるにはどうすればよいですか?