1

2 つの列 (c1、c2) を持つ ax 行列があります。最初の列 (c1) を修正し、それぞれ値 C2+m、C2+m...C2+m を持つ 10 個の列を X 行列に追加します。m はランダムな整数です。最後に、マトリックスは次のようになります。

C1、C2+m、C2+m、C2+m...C2+m;

コード:

proc iml;

use nonpar;

read all var{treat response} into x;

do i=1 to 10;

call randseed(123);

call randgen(u, "Uniform");

Max = 300; Min = 68;

m = min + floor( (1+Max-Min)*u );

x = x[,1]||x[,2]+m;

end;

quit;

誰かがそれを修正するのを手伝ってくれますか..ありがとう

4

1 に答える 1

1

あなたを正しい方向に導くいくつかのこと。

まず、完全な宛先マトリックスを事前に作成します。常に連結しないでください。したがって、データセットを に読み取ったら、 と同じ行数で11 列のデータセットをxもう 1 つ作成します。 あなたのためにこれを行います。x_newxj

次に、すべての乱数を一度に作成できますが、最初に を使用して、塗りつぶす行列のサイズを定義する必要がありますj。これは、10 列のそれぞれと行のそれぞれに新しいランダムな整数が必要であると仮定しています。各行のみ、または合計で 1 つの「m」のみが必要な場合は、これを別の方法で行う必要がありますが、それを明確にする必要があります。10 m の 1 行だけが必要な場合は、最初にそれを行い ( u1 行 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;
于 2014-09-24T16:30:55.037 に答える