Пара вещей, которые должны привести вас в правильном направлении.
Во-первых, предварительно создайте полную матрицу назначения; не объединяйте постоянно. Итак, как только вы прочитаете набор данных в 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;
person
Joe
schedule
24.09.2014