条件列号计算For each ID group in the data table, I like to calculate:
-
The count of Part Number where RANK_DESC = 1
-
The count of Part Number where RANK_ASC = 1 </CODE></STRONG></P>
<SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ReliabilityWolf_0-1745749897393.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="ReliabilityWolf_0-1745749897393.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="ReliabilityWolf_0-1745749897393.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="ReliabilityWolf_0-1745749897393.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="ReliabilityWolf_0-1745749897393.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="ReliabilityWolf_0-1745749897393.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="ReliabilityWolf_0-1745749897393.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="ReliabilityWolf_0-1745749897393.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="ReliabilityWolf_0-1745749897393.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="ReliabilityWolf_0-1745749897393.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="ReliabilityWolf_0-1745749897393.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="ReliabilityWolf_0-1745749897393.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="ReliabilityWolf_0-1745749897393.png" style="width: 400px;"><span class="lia-inline-image-display-wrapper" image-alt="ReliabilityWolf_0-1745749897393.png" style="width: 400px;"><img src="https://us.v-cdn.net/6038925/uploads/images/75219iB37346FFBB9C212B/ReliabilityWolf_0-1745749897393.png" role="button" title="ReliabilityWolf_0-1745749897393.png" alt="ReliabilityWolf_0-1745749897393.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN>
<P>我想添加<SPAN>两个新列 RANK_DEC 的 PN 计数 =1,RANK_ASC 的 PN 计数=1。有什么公式可以应用于它们吗?</SPAN></P>
<SPAN>还有其他更好的方法吗?非常感谢!</SPAN></LI>
</OL></LINGO-BODY><LINGO-LABS id="lingo-labs-870410" slang="en-US" mode="CREATE"><LINGO-LABEL>基础数据分析与建模</LINGO-LABEL></LINGO-LABS><LINGO-SUB id="lingo-sub-870421" slang="en-US" mode="UPDATE">回复:条件列号计算</LINGO-SUB><LINGO-BODY id="lingo-body-870421" slang="en-US" mode="UPDATE"><P>对于条件计算,JMP 提供了<FONT face="courier new,courier">列 XYZ()</FONT>聚合函数。<BR />对于计数,您可以使用<FONT face="courier new,courier">Col Number()。</FONT>它计算任何非缺失的条目。<FONT face="courier new,courier"><BR /></FONT>要将不匹配的行转换为“缺失”,您需要类似<FONT face="courier new,courier">Col sum (if(Rank_ASC==1 ,1,.),:Part_Number) 的内容。<BR /></FONT>如果 Rank 为 1,则<FONT face="courier new,courier">如果</FONT>表达式返回 1,对于其他行,它将返回“。”(缺失) - 并且 JMP 不计算该行。<BR /><BR />在数字输入的第一个参数之后,您可以指定附加列(和表达式)来指定 byGroups。<BR />使用<FONT face="courier new,courier">:零件编号</FONT>作为第二个参数,JMP 将为每个 :Part_Number 创建单独的计数。<BR /><BR />我更喜欢<FONT face="courier new,courier">Col Sum()。<BR /></FONT>要计算特定行的数量,您可以使用类似<FONT face="courier new,courier">Col sum (Rank_ASC==1 , :Part_Number ) 的比较。<BR /></FONT>这个表达背后的想法是:<BR />对于<FONT face="courier new,courier">秩为 1 的行,</FONT>比较<FONT face="courier new,courier">Rank_ASC==1</FONT>的结果为 1,对于其他行,结果为 0。<BR />因此, <FONT face="courier new,courier">科尔萨姆</FONT>将计算所有 rank=1 的行。<BR />这里我们再次使用<FONT face="courier new,courier">:零件编号</FONT>作为第二个参数。因此,不同 Part_Number 的计数将分开。<BR /><BR /></P>
<PRE><CODE class=" language-jsl">New Table( "parts",
Add Rows( 7 ),
New Column( "ID",
Character,
Set Values( {"U30372", "W30569", "W30569", "Q40040", "P40051", "P40051", "P40051"} )
),
New Column( "Part_Number",
Character,
Set Values( {"T772", "T772", "T772", "T772", "T770", "T772", "T770"} )
),
New Column( "Rank_ASC", Formula( Col Rank( :Part_Number, :ID ) ) ),
New Column( "PN_Count_Rank_ASC",
Formula( Col Sum( :Rank_ASC == 1, :Part_Number ) ),
Set Display Width( 156 )
),
New Column( "RANK_DESC",
Formula( (Col Number( :Part_Number, :ID ) - Col Rank( :Part_Number, :ID )) + 1 )
),
New Column( "PN_Count_Rank_DESC", Formula( Col Sum( :RANK_DESC == 1, :Part_Number ) ) )
)
回复:条件列号计算抱歉我的表述不清楚。
这是我的期望:例如,在“P40051”组中,Rank_ASC_1 的 Part_number == “T770”,该组中“T770”的数量为 2,类似地,Rank_DESC_1 的 Part_number == “T772”,该组中“T772”的数量为 1。在“Q40040”组中,Rank_ASC_1 的 Part_number 和 Rank_DESC_1 的 Part_number == “T770”,该组中 Rank_DESC_1 的 Part_number 或“T770”的数量为 1。这是我在右边两列中预期的结果。

附上数据文件以供检查。
回复:条件列号计算Ah, right, I mixed up the
For each ID group
with
对于每个Part_Number团体
回复:条件列号计算该代码应该可以工作:
New Table( "parts",
Add Rows( 7 ),
New Column( "ID",
Character,
Set Values( {"U30372", "W30569", "W30569", "Q40040", "P40051", "P40051", "P40051"} )
),
New Column( "Part_Number",
Character,
Set Values( {"T772", "T772", "T772", "T772", "T770", "T772", "T770"} )
),
New Column( "Rank_ASC", Formula( Col Rank( :Part_Number, :ID ) ) ),
New Column( "PN_Count_Rank_ASC=1",
Formula( Col Sum( Col Rank(:Part_Number, :ID,<< tie(minimum)) ==1, :ID ) ),
),
使用<< tie(minimum)选项,所有 Part_Number 为 Rank 1 的行都将获得 Rank=1,这样所有这样的行都会被统计。在这种情况下,我们可以跳过计算 Rank 的中间步骤。
回复:条件列号计算没有< < ont>选项,具有相同 ID / Part_Number 的附加行将获得增量排名。
这里你可以使用列最小值()在所有相同 ID/Part_number 的行中复制 Rank=1 的信息:
get the minimum rank of the combination :Part_Number / :ID :
Col Minimum( :RANK_ASC,:Part_Number, :ID)
if this min rank is 1, mark the row:
Col Minimum( ... ) == 1
for these rows, the result is 1, all the other rows get 0
for every ID, count the 1s:
Col sum( ... , :ID )</CODE></LI>
</UL>
<P><SPAN>通过这种方法,可以用类似的代码构造<FONT face="courier new,courier">count_Rank_ASC</FONT>和<FONT face="courier new,courier">count_Rank_DESC</FONT> :</SPAN></P>
<PRE><CODE class=" language-jsl">New Table( "parts",
Add Rows( 7 ),
New Column( "ID",
Character,
Set Values( {"U30372", "W30569", "W30569", "Q40040", "P40051", "P40051", "P40051"} )
),
New Column( "Part_Number",
Character,
Set Values( {"T772", "T772", "T772", "T772", "T770", "T772", "T770"} )
),
New Column( "Rank_ASC", Formula( Col Rank( :Part_Number, :ID ) ) ),
New Column( "PN_Count_Rank_ASC=1",
Formula( Col sum(Col Minimum( :RANK_ASC,:Part_Number, :ID) ==1, :ID ))
),
New Column( "RANK_DESC",
Formula( (Col Number( :Part_Number, :ID ) - Col Rank( :Part_Number, :ID )) + 1 )
),
New Column( "PN_Count_Rank_DESC=1",
Formula( Col sum(Col Minimum( :RANK_DESC,:Part_Number, :ID) ==1, :ID ))
)
)
回复:条件列号计算在我的表中,“RANK_ASC”列已经在那里了,我不确定它是否由col Rank(:Part_Number,:ID)定义。但我喜欢根据RANK_ASC的值(RANK_ASC == 1)来查找特定的Part_Number,然后期望适当的公式计算该组中Part_number的数量。在您的公式中,我不知道如何<< tie(minimum)与RANK_ASC(RAN_ASC == 1)关联。顺便问一下,RANK_DESC == 1的公式是什么?
回复:条件列号计算这是一个选项(还有很多其他选项)
Col Sum(:Part_Number == :Part_Number[Col Min(If(:RANK_ASC == 1, Row(), .), :ID)], :ID) //change :RANK_ASC to RANK_DESC for other formula

这种使用 Col Min/Max、If() 和 Row() 的公式非常有用。
请注意,由于这些函数并非设计用于此用途,因此在 JMP 的任何未来版本中都可能出现问题。为了防止 JMP 犯下重大错误,我创建了这个愿望清单: 在“设置每个值”中使用公式表达式,并在“Col”中使用表达式作为第一个参数,支持统计公式的行为
回复:条件列号计算对于 RANK_DESC=1,我确信可以使用 << tie 设置一个复杂的公式。
更简单:使用第二种方法:
https://community.jmp.com/t5/Discussions/Conditional-Column-number-calculation/mp/870429/highlight/true#M103370
如果您不喜欢/不信任<< tie()选项,请使用第二种方法。
如果表中已经存在 Rank_ASC 和 RANK_DESC,则使用第二种方法是一个不错的选择。无需自行计算列。
回复:条件列号计算感谢您的支持,它有效回复:条件列号计算欢迎。