有几件事可以引导您朝着正确的方向前进。
首先,预先创建完整的目标矩阵;不要经常连接。因此,一旦您将数据集读入x
,请创建另一个x_new
与行数相同x
但有 11 列的数据集。 j
会为你做这件事。
其次,您可以一次生成所有随机数,但您必须首先定义要填充的矩阵的大小,再次使用j
. 这是假设您希望 10 列中的每一列和每一行都有一个新的随机整数;如果您只想要每一行或总共只有一个“m”,您需要以不同的方式执行此操作,但您需要澄清这一点。如果您只想要一行 10 m,那么您可以先执行此操作(生成u
具有 10 列 1 行的 a),然后使用矩阵乘法将其扩展为 x 的全部行数。
这是一个使用 SASHELP.CLASS 的简化示例,展示了这两个概念的作用。
proc iml;
use sashelp.class;
read all var {age weight} into x;
x_new = j(nrow(x),11); *making the new matrix with lots of columns;
x_new[,1] = x[,1]; *copy in column 1;
call randseed(123);
u = j(nrow(x),10); *make the to be filled random matrix;
call randgen(u,'Uniform',68,300); *the min/max parameters can go here;
u = floor(u+0.5); *as Rick noted in comments, needed to get the max value properly;
x_new[,2:11] = u[,1:10] + x[,2]; *populate x_new here;
print x_new;
quit;