现场功能的 SAS 问题 [英] SAS trouble with field functions

查看:14
本文介绍了现场功能的 SAS 问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以,我正在对 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆