【问题标题】:Ignore zeros (or blanks) in Excel LINEST function with multiple independent variables忽略具有多个自变量的 Excel LINEST 函数中的零(或空白)
【发布时间】:2018-01-11 00:13:35
【问题描述】:

我想通过linest 运行多重(!)因子分析,再次排除所有包含零的行(或者如果这更容易空白单元格)。有没有办法使用最简单的函数来做到这一点?

我尝试使用以下公式,这是我在其他地方找到的,但除了 #VALUE! 之外什么也得不到。

=LINEST(IF(ISNUMBER(C15:C26);C15:C26;);IF(ISNUMBER(C15:C26);CHOOSE({1;2;3};1;D15:D26;E15:E26););1;1)

仅供参考 - Y 值是 C 列,我的 X 值在 D 和 E 列中。

提前致谢! 朱利安

enter image description here

【问题讨论】:

  • 我还找到了下面的linest/offset 函数,它允许我排除单元格 - 但是,我只设法使它适用于单个回归 ***** =LINEST(OFFSET(C15 ;MATCH(1;I15:I26;0)-1;0;SUM(I15:I26);1);偏移量(D15;MATCH(1;I15:I26;0)-1;0;SUM(I15:I26 );1);0;1)

标签: excel regression linear-regression missing-data


【解决方案1】:

不确定这是否已经解决,但我自己一直在尝试这样做并找到了解决方案。我们现在可以使用 FILTER 功能。如果范围是 C15:C26,以下应该可以工作

=LINEST(FILTER(C15:C26,C15:C26<>0,))

【讨论】:

    【解决方案2】:

    首先,我建议您过滤数据以排除任何列中包含零或空白单元格的任何行,然后将过滤后的数据复制到工作表的另一个区域或完全单独的工作表。然后你可以简单地使用LINEST。

    否则,您可以使用以下公式,需要与CONTROL+SHIFT+ENTER确认...

    =LINEST(INDEX(C:C,N(IF(1,MODE.MULT(IF(MMULT(--(C15:E26=0),TRANSPOSE(COLUMN(C15:E26))^0)=0,ROW(C15:E26)*{1,1}))))),INDEX(D:E,N(IF(1,MODE.MULT(IF(MMULT(--(C15:E26=0),TRANSPOSE(COLUMN(C15:E26))^0)=0,ROW(C15:E26)*{1,1})))),N(IF(1,{1,2}))),1,1)
    

    希望这会有所帮助!

    【讨论】:

      【解决方案3】:

      我用我的函数 discard_empty 解决了空单元格。该函数将范围转换为没有空值的值,并且 LINEST 有效。

      =LINEST(discard_empty(A1:A9))
      
      Function discard_empty(range_in As Range)
      Dim arr_temp() As Variant
      Dim arr_new() As Variant
      Dim i As Integer
      Dim j As Integer
      Dim k As Integer
          arr_temp = range_in
          For k = LBound(arr_temp, 1) To UBound(arr_temp, 1)
              For j = LBound(arr_temp, 2) To UBound(arr_temp, 2)
                  ReDim Preserve arr_new(i)
                  arr_new(i) = arr_temp(k, j)
                  i = i + 1
              Next j
          Next k
          arr_temp = arr_new
          Erase arr_new
          j = 0
          For k = LBound(arr_temp) To UBound(arr_temp)
             If arr_temp(k) <> Empty Then
                  ReDim Preserve arr_new(j)
                  arr_new(j) = arr_temp(k)
                  j = j + 1
              End If
          Next k
          discard_empty = arr_new
      End Function
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-15
        • 2018-11-20
        • 2015-09-18
        • 1970-01-01
        • 2018-07-05
        • 2021-02-17
        相关资源
        最近更新 更多