现场功能的 SAS 问题 [英] SAS trouble with field functions
问题描述
所以,我正在对 SAS 例程进行一些逆向工程" - 将其带到 SQL 和 Pentaho.
So, I'm doing some "reverse engineering" on a SAS routine - to bring it to SQL and Pentaho.
我尝试直接浏览它,但我注意到很多冗余过程,所以我开始在思维导图中映射所有内容,以识别所有冗余并在对 SQL 执行任何操作之前对其进行处理.
I tried going straight through it, but I noted a lot of redundant processes, so I started to map everything in a mind map to identify all the redundacies and treat them before doing anything on SQL.
我偶然发现了以下几行:
I stumble upon these lines:
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 中的方程.
And I have no idea on how to map this process, specially "fieldB" and the equation inside sqrt.
谁能帮帮我?
(编辑)好的,Joe 确实帮我解决了将军问题……我仍然存在的两个疑问是:
(edit) Okay, Joe really helped me out with the general... my two still remaining doubts are:
1- "fieldB = B[,n:fieldA];"这是什么意思?我的意思是,如果 n 是静态的,我现在会做什么,但我遇到了流程的另一部分......
1- "fieldB = B[,n:fieldA];" what does this stand for? I mean, I now what it does if n is static, but I came around another part of the process where...
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 开始的 18x18 矩阵,从 B[1,1] 开始 - 但是当我尝试另一个数字,比如 10 时,它从 B 的 col163 开始.
I'm all good until it comes to fieldC. I understand what cusum does and all, but I have really no idea what happens on fieldC. When I checked it out with &t = 1, it showed me an 18x18 matrix from B, starting at B[1,1] - but when I tried another number, like 10, it started at col163 of B.
2- 我不知道这是否与我至少到目前为止不理解的矩阵变换/乘法有关,但为什么2.33*sqrt(A`*fieldB*A)"(原始字段 C) 返回单个值?它不应该返回一个矩阵吗?
2- I don't know if this has anything to do with matrix transformations/multiplication that I, at least so far don't understand, but why does "2.33*sqrt(A`*fieldB*A)" (the original fieldC) returns a single value? shouldn't it return a matrix?
推荐答案
那是 SAS/IML,只是为了清楚(与 Base SAS 非常不同).
That's SAS/IML, just to be clear (very different from Base SAS).
FieldB 是 B 的所有行,以及 B 的一些列.'n' 没有在那里定义,所以我不知道它会是什么;如果它是 1,那么它将是一个方阵(因此,如果它是 4 行 5 列,那么 fieldB 是一个 4x4 删除第五列的矩阵).
FieldB is all rows of B, and some number of columns of B. 'n' is not defined there, so I don't know what it would be; if it's 1, then it would be a square matrix (so, if it is 4 rows 5 columns, then fieldB is a matrix that is 4x4 dropping the fifth column).
此测试代码显示结果:
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
FieldC is using matrix transformations and matrix multiplication. SQRT will return a matrix where each value is the square root of the original value, so that's as straightforward as you probably think. Matrix multiplication is more complicated; look it up in the SAS reference for more detail: 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
The wikipedia page actually is a bit better at answering how to actually do it, though. http://en.wikipedia.org/wiki/Matrix_multiplication#Matrix_product_.28two_matrices.29
最后,A` 是 A 的转置,大概是为了确保行数/列数适用于矩阵乘法.顺便说一句,我有点惊讶 fieldB 不是此处 A 的行数的子集,除非此处未披露的数据背后存在某种关系.
Finally, A` is the transpose of A, important presumably to make sure the number of rows/columns works out for the matrix multiplication. Incidentally, I'm a bit surprised that fieldB isn't subset by the number of rows of A here, unless there's some sort of relationship behind the data not disclosed here.
这篇关于现场功能的 SAS 问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!