0

我一直在处理其他人使用 StDev 函数制作的报告。我认为这很简单,但是数据可以包含每个记录的多个值,因此有 if 语句用于确定从每个记录中获取哪个值。我已将一个表导出到 Excel,其中每条记录包含一个值(应在 StDev 中使用的值),然后计算那里的 SD 以提供检查。

报告和 Excel 给了我非常不同的价值:(

因此,我将返回报告并使用一些额外的公式字段来计算 SD 速记以作为一种决定性的投票(手指交叉它不会产生第三组值......)。

我已经解决了语法错误,但仍然出现运行时错误 - “除以零”,然后突出显示下面指示的代码部分......

我的公式字段是:

{@StDevArrayPopulate} - 在详细信息部分

NumberVar Array varStDevArray;
NumberVar varStDevArrayCount;

varStDevArray [varStDevArrayCount] := {ValueToSummarise};

varStDevArrayCount := varStDevArrayCount + 1;

{@StDevArrayCalculate} - 在组页脚中

NumberVar Array varStDevArray;
NumberVar varCounter :=1;
NumberVar varMean := 0;
NumberVar varStDev := 0;
NumberVar varStDevArrayCount;

// START OF MEAN

// Sum of all of the values in the array

for varCounter:= 1 to varStDevArrayCount step 1 do
(
    varMean := varMean + varStDevArray [varStDevArrayCount];
);

// Divide by the total number of values in the array

varMean := varMean / varStDevArrayCount;  // !! This is the line that highlights after the error message !!

// END OF MEAN

// START OF STANDARD DEVIATION

// Subtract the mean from each value in the array and square the result

for varCounter := 1 to varStDevArrayCount step 1 do
(
    varStDevArray[varStDevArrayCount] := (varStDevArray [varStDevArrayCount] - varMean) * (varStDevArray [varStDevArrayCount] - varMean);
);

// Sum of all of the values in the array

for varCounter:= 1 to varStDevArrayCount step 1 do
(
    varStDev := varStDev + varStDevArray [varStDevArrayCount];
);

// Divide by the total number of values in the array

varStDev := varStDev / varStDevArrayCount;

// Square root of mean of differences

varStDev := Sqr(varStDev)

// END OF STANDARD DEVIATION

{@StDevArrayCalculate} - 在组页脚中

NumberVar varMean;
NumberVar varStDev;

"The mean is " & varMean & ", and the standard deviation is " & varStDev & "."

我尝试使用 Running Total 字段,但这会产生错误,因为它需要在 Populate formula 字段运行之前计算第一条记录。我还尝试在标题中添加第四个字段,它将 varStDevArrayCount 初始化为 1。

有没有人有什么建议?

4

1 回答 1

0

看起来没有详细记录,因此您在数组中得到零......我认为初始化1不会有任何区别,而是像下面这样进行小改动并检查。

if varStDevArrayCount=0
then
varMean :=varMean 
else
varMean := varMean / varStDevArrayCount;

我建议你只详细检查记录,然后调试

于 2016-07-01T09:16:27.020 回答