2

そこで、SASルーチンで「リバースエンジニアリング」を行って、SQLとPentahoに導入しています。

私はそれを直視しようとしましたが、多くの冗長なプロセスに気づいたので、SQLで何かをする前に、すべての冗長性を識別して処理するためにマインドマップにすべてをマッピングし始めました。

私はこれらの線につまずきます:

use table1
    read all into A
use table2
    read all into B
fieldA = nrow(B);
fieldB = B[,n:fieldA];
fieldC = 2.33*sqrt(A`*fieldB*A);

そして、このプロセス、特に「fieldB」とsqrt内の方程式をどのようにマッピングするかについてはわかりません。

誰かが私に手を貸してくれませんか?

(編集)さて、ジョーは本当に一般的なことで私を助けてくれました...私の2つのまだ残っている疑問は次のとおりです:

1- "fieldB = B [、n:fieldA];" これは何の略ですか?つまり、nが静的である場合はどうなるかということですが、プロセスの別の部分で...

use table1;
    read all into A;
use table2;
    read all into B;
fieldA = ncol(B);
fieldB = ncol(A);
ncurvas = fieldA/fieldB;
N = J(ncurvas+1,1,fieldB);
N[1] = 1;
NCUM = cusum(N)-1;
fieldC = B[,(NCUM[&t]+1):NCUM[&t+1]];

fieldCになるまで、私はすべて元気です。cusumが何をするのか、そしてすべてを理解していますが、fieldCで何が起こるのか本当にわかりません。&t = 1でチェックアウトすると、B [1,1]で始まるBからの18x18行列が表示されましたが、10などの別の数値を試すと、Bのcol163で始まりました。

2-これが、少なくとも今のところ理解していない行列変換/乗算と関係があるかどうかはわかりませんが、なぜ「2.33 * sqrt(A` * fieldB * A)」(元のfieldC )単一の値を返しますか?行列を返すべきではありませんか?

4

1 に答える 1

2

これはSAS/IMLですが、明確にするためです(Base SASとは大きく異なります)。

FieldBはすべてBの行であり、Bのいくつかの列です。'n'はそこで定義されていないため、それが何であるかはわかりません。1の場合、正方行列になります(つまり、4行5列の場合、fieldBは4x4で5番目の列を削除する行列になります)。

このテストコードは結果を示しています。

proc iml;
B={1 2 3 4 5, 4 5 6 7 8, 7 8 9 10 11, 10 11 12 13 14};
print B;
fieldA = nrow(B);
print FieldA;
fieldB = B[,1:fieldA];
print FieldB;
quit;

結果:

B 
1 2 3 4 5 
4 5 6 7 8 
7 8 9 10 11 
10 11 12 13 14 



fieldA 
4 



fieldB 
1 2 3 4 
4 5 6 7 
7 8 9 10 
10 11 12 13 

FieldCは、行列変換と行列乗算を使用しています。SQRTは、各値が元の値の平方根である行列を返すため、おそらく考えているほど簡単です。行列の乗算はもっと複雑です。詳細については、SASリファレンスで調べてください: http ://support.sas.com/documentation/cdl/en/imlug/59656/HTML/default/viewer.htm#langref_sect14.htm

ただし、ウィキペディアのページは、実際にそれを行う方法に答えるのに少し優れています。 http://en.wikipedia.org/wiki/Matrix_multiplication#Matrix_product_.28two_matrices.29

最後に、A`はAの転置であり、おそらく行列の乗算で行/列の数が機能することを確認するために重要です。ちなみに、ここに開示されていないデータの背後に何らかの関係がない限り、fieldBがここのAの行数によってサブセット化されていないことに少し驚いています。

于 2013-01-16T20:52:40.753 に答える