JMP 相当于 Excel 的 COUNTIF 函数我正在尝试模仿这种 Excel 类型的行为:
| | A | B |
| 1 | 故障类型 | 此类型的故障数量 |
| 2 | f1 | =countif($a$2:$a$999,a2) |
| 3 | f2 | =countif($a$2:$a$999,a3) |
| 4 | f1 | =countif($a$2:$a$999,a4) |
| 5 | f1 | =countif($a$2:$a$999,a5) |
| 6 | f2 | =countif($a$2:$a$999,a6) |
| ... | ... | ... |
... 在 JMP 中。这可以作为列公式吗?
我试过“Col Sum( :failureType == :failureType[ Row() ] )”,但不起作用,我不明白为什么。有时“:ColumnName”会返回单个值,有时它会返回整个列的条目并自动循环。有没有办法知道它会做什么,也许从脚本索引中?
基础数据分析与建模回复:JMP 相当于 Excel 的 COUNTIF 函数
也许是按失败类型排序的 1 列总和?
Col Sum(1, :FailureType)
这里第 6 列的公式为 Col Sum(1, :age)

回复:JMP 相当于 Excel 的 COUNTIF 函数是的,那可能会有用。
为什么我的 Col Sum(...) 不起作用? Row() 是否也在每一步内部更新?
回复:JMP 相当于 Excel 的 COUNTIF 函数仅使用 Row() 创建列,您将看到它返回的内容

你可以做同样的事情
:failureType[Row()]
以及
:failureType
最后
:failureType == :failureType[Row()]
看看你最终会得到什么(你正在将故障类型的当前行值与故障类型的当前行值进行比较,只是语法不同,几乎总是 1)。
回复:JMP 相当于 Excel 的 COUNTIF 函数其他选项是 Col Number()
Col Number(:FailureType, :FailureType)
回复:JMP 相当于 Excel 的 COUNTIF 函数这些回复直接回答了您关于类似 Excel 的函数的问题。如果您要这样做,还可以使用表格 > 汇总、分析 > 制表和图形 > 图形生成器进行汇总,而无需使用公式列。
回复:JMP 相当于 Excel 的 COUNTIF 函数这个公式似乎也有效:
Names Default to Here(1);
n1 = :failureType;
Col Sum( :failureType == n1 )
似乎在 Col Sum 函数中,它期望迭代列表,类似于在 python 中对压缩变量执行 for 循环,但在第二行中,它只是从当前行获取 :failureType 的值。这些隐式行为非常有用/有用,但前提是用户了解它们的工作原理。
回复:JMP 相当于 Excel 的 COUNTIF 函数哇。有点意外。我没想到会这样。
你是怎么发现的?
Open( "$SAMPLE_DATA/Big Class.jmp" );
New Column( "ColSum1",
Formula(
Col Sum( :age == 12 );
)
);
New Column( "ColSum2",
Formula(
twelve = 12;
Col Sum( :age == twelve );
)
);
New Column( "ColSum3",
Formula(
myAGE = :age;
Col Sum( :age == myAGE );
)
);
New Column( "ColSum4",
Formula(
myAGE = :age;
myname= :name;
Col Sum( show(myname,myAge,:name,:age,"-");:age == myAGE );
)
);
回复:JMP 相当于 Excel 的 COUNTIF 函数具有一些相似之处的相关文章: Countif 等价吗?
但没有@BHarris的魔法:)
回复:JMP 相当于 Excel 的 COUNTIF 函数尽管它看起来确实有效,但我不会使用它(我认为如果它要求您将 :failureType 作为 byvar,它应该没问题)。我认为这是某种非预期行为(甚至比使用 1 更严重,根据 JMP 支持,这也不被允许,但我们希望 JMP 永远不会破坏这一点
在“设置每个值”中使用公式表达式并在 Col 统计公式中使用表达式作为第一个参数支持的行为)。
您可以向 JMP 支持部门报告,看看他们能否提供技术解释,说明其工作原理。您也可以尝试以类似的方式使用其他比较

回复:JMP 相当于 Excel 的 COUNTIF 函数@hogi它可能没有看起来那么神奇—— Col Sum 的第一个参数是一个表达式,在这种情况下,由于 n1 是预先计算的(可能根据上下文被设置为当前行的值),并且 == 表达式似乎返回 1 或 0,因此它只是在列值等于 n1 的地方加一堆 1,否则加 0。
对我来说有点神奇的是,有时在列公式中,当输入“:columnName”时,JMP 会遍历列中的行,而其他时候它只会从当前行中的该列中提取值。自从在另一个线程上讨论以来,这对我来说一直很神秘。
我猜测 Col Number() 函数是在这种情况下最合适的函数,可能比这个缓存得更干净。
坦白说,我并不知道 Col Number() 的存在。我成年后的大部分时间都在使用 Excel,所以我真希望有 Excel 函数到 JMP 函数的映射。
回复:JMP 相当于 Excel 的 COUNTIF 函数New Column( "ColSum4",
Formula(
myAGE = :age;
myname= :name;
Col Sum( show(myname,myAge,:name,:age,"-");:age == myAGE );
)
);
非常具有说明性。Col 累积的行为与我想象的行为略有不同。
我猜测 Col Sum 会对论点进行一次评估,然后根据 groupBy 对结果进行分组/收集。
但实际上:
对每一行都进行公式评估,对于 RWx 行总共有 40x。
每次迭代时,Col Sum 都会对每一行 RWy 的参数求值 40 次。
我猜它会尝试缓存结果,如果可以确定结果是相同的,它就不会再次为其他 RWx 评估参数。
但是在 Show() 或 :age = myAGE 的情况下,它必须一次又一次地进行评估。
-> 总共 40 x 40 次。
因此,例如对于行 RWx = 3 (myName = Jane),它会对参数进行 40 次求值。
对于 40 个 RWy 中的 8 个,:age == myAge 的结果为 1。因此第 3 行的 Col Sum 为 8。
因此,第 40 行的 Col Sum 为 3。
回复:JMP 相当于 Excel 的 COUNTIF 函数
@jthi写道:
尽管它看起来确实有效,但我不会使用它(我认为如果它要求您将 :failureType 作为 byvar,它应该没问题)。我认为这是某种非预期行为(甚至比使用 1 更严重,根据 JMP 支持,这也不被允许,但我们希望 JMP 永远不会破坏这一点
在“设置每个值”中使用公式表达式并在 Col 统计公式中使用表达式作为第一个参数支持的行为)。
如果某个功能有记录的话,我也会感到更加自信——以某种方式防止突然被删除……
JMP 必须确定是否可以缓存结果。谁知道其中的逻辑?
这里,JMP认为使用缓存数据是可以的:
t0 = hptime();
New Column( "test",
Formula(
wait(0.1);
Col Sum( hp time() )
),
);
current data table() << run formulas();
show((hptime()-t0)/1000000)
回复:JMP 相当于 Excel 的 COUNTIF 函数@BHarris
@BHarris写道:
有时在列公式中,当输入“:columnName”时,JMP 会迭代列中的行
你能举个例子吗?
回复:JMP 相当于 Excel 的 COUNTIF 函数当然,打开 BigClass.jmp 并添加具有以下公式的列:
列总计(:身高*:体重,:性别)