假设取0-5 的整数,如果选任意数,程序需要稍微改一下
%macro matrix(row = , col = );
proc iml;
a = J(&row, &col, 0) ;
sum = {0};
do i =1 to &row;
do j = 1 to &col;
a[i,j] = int(6*ranuni(-1));
sum[1,1] = sum[1,1] + a[i,j];
do until (sum[1,1] <= 5 );/* if great than 5, then regenerate number*/
sum[1,1] = sum[1,1] - a[i,j];
a[i,j] = int(6*ranuni(-1));
sum[1,1] = sum[1,1] + a[i,j];
end;
end;
end;
a[&row,&col] = 5-sum[1,1];
/* print matrix */
print a;
quit;
%mend;
/* 2 by 2 */
%matrix(row=2,col = 2);
/* For other Matrices*/
%macro OtherMatrix();
%do i = 2 %to 4;
%let j = %eval(&i +1);
%matrix(row=&i, col = &j);
%end;
%mend;
%OtherMatrix();
[此贴子已经被作者于2009-4-3 7:36:12编辑过]