あなたを正しい方向に導くいくつかのこと。
まず、完全な宛先マトリックスを事前に作成します。常に連結しないでください。したがって、データセットを に読み取ったら、 と同じ行数で11 列のデータセットをx
もう 1 つ作成します。 あなたのためにこれを行います。x_new
x
j
次に、すべての乱数を一度に作成できますが、最初に を使用して、塗りつぶす行列のサイズを定義する必要がありますj
。これは、10 列のそれぞれと行のそれぞれに新しいランダムな整数が必要であると仮定しています。各行のみ、または合計で 1 つの「m」のみが必要な場合は、これを別の方法で行う必要がありますが、それを明確にする必要があります。10 m の 1 行だけが必要な場合は、最初にそれを行い ( u
1 行 10 列の a を生成)、行列乗算を使用して x の行数全体に拡張します。
SASHELP.CLASS を使用した簡単な例で、これら 2 つの概念が機能していることを示します。
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;