0

EXCEL からのインポートの下に、input_data という名前のデータ セットがあります。

0.353481635 0.704898683 0.078640917 0.813815803 0.510842666 0.240912872 0.986312218 0.781868961 0.682272971
0.443441526 0.653187181 0.753981865 0.34909803  0.84215961  0.793863082 0.047816942 0.176759112 0.54213244
0.21443281  0.142501578 0.927011587 0.407251043 0.290280445 0.90730524  0.677030212 0.770541244 0.915728969
0.583493041 0.685127614 0.119042255 0.067769934 0.795793907 0.405029459 0.817724346 0.594170688 0.345660875
0.816193304 0.636823417 0.036348358 0.027985453 0.117027493 0.436516667 0.593191955 0.916981676 0.574223091
0.766842249 0.743249552 0.400052263 0.809650253 0.683610082 0.42152573  0.050520292 0.329441952 0.868549022
0.112847881 0.462579082 0.526220066 0.320851313 0.944585551 0.233027402 0.66141107  0.8380858   0.120044416
0.873949265 0.118525986 0.590234323 0.481974796 0.668976582 0.466558592 0.934633956 0.643438048 0.053508922

そして、以下に p という別のデータセットがあります

data p;
input p;
datalines;
0.12    
0.23    
0.11    
0.49    
0.52    
0.78    
0.8 
0.03    
0.02
run;

proc transpose data = p out=p2;
run;

私がやりたいのは、SAS を使用した IML での行列操作です。

すでにいくつかのコードがありますが、最終的な計算でエラーが発生しました。誰か手を貸してくれませんか?

proc iml;
use input_data;
read all var _num_ into x; 
print x;

proc iml;
use p2;
read all var _num_ into k;
print k;

proc iml;
Value1 = k * x;  
print Value1;
quit;
4

1 に答える 1

3

ここにはいくつかの問題があります。

まず、3 つの PROC IML ステートメントがあります。PROC IML は、実行中にのみ値を保持します。終了すると、すべてのベクトルが永遠に消えます。したがって、PROC IML を削除します。

次に、行列が正しく順序付けられ、構造化されていることを確認する必要があります。行列の乗算は次のように機能します。

mxn * nxp = mxp

両方の N が同じでなければなりません。これは行 x 列であるため、左側の行列の列数は、右側の行列の行数と同じでなければなりません。(これは、左側の行列の各行の各要素が、右側の行列の列の対応する要素で乗算されてから合計されるため、数値が一致しない場合は実行できないためです。)

したがって、8x9 と 9x1 があり、これを 1x9 に転置します。まず、p を転置しないで、9x1 のままにします。次に、順序が正しいことを確認します (行列の乗算は可換ではなく、順序が重要です)。 どちらが機能しないかを k * x意味します (1 と 8 は同じではないため、内側の 2 つの数字が一致する必要があることを思い出してください)。つまり、2 つの 9 が一致するため、機能します。9x1 * 8x9x*k8x9 * 9x1

最終出力:

proc iml;
  use input_data;
  read all var _num_ into x; 
  print x;

  use p;
  read all var _num_ into k;
  print k;


  Value1 = x * k;  
  print Value1;
quit;
于 2014-10-10T17:56:07.880 に答える