夫妇的事情,应该引领你在正确的方向。
首先,预先创建完整的目标矩阵;不要连续不断地连接。因此,一旦您将数据集读入x
,请创建另一个x_new
,其行数与x
相同,但有11列。 j
会为你做这个。其次,您可以一次制作所有的随机数字,但您必须首先使用j
来定义要填充的矩阵的大小。这是假设你想要一个新的随机整数为每个10列和每一行;如果你只想要每一行或总共只有一个'm',你需要以不同的方式做这件事,但你需要澄清这一点。如果您只需要一行10米,那么您可以先执行该操作(生成一个u
,其中有10列1行),然后使用矩阵乘法将其扩展为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;
来源
2014-09-24 16:30:55
Joe
如果您有IML问题,请不要忘记[tag:sas-iml]。 – Joe 2014-09-24 16:31:21