如何識別資料組中的最小值和最大值假設我把大班的所有學生都按性別和年齡分組,例如12歲的男孩分在一組,12歲的女孩分在另一組,等等。
透過該設置,我想建立一個公式列,如果該組的男女性別的最大身高最短,則該列的值為 1,否則為 0。
例如,在這個數據中:
| 團體 | 姓名 | 高度 | 新專欄 |
| 12歲女孩 | 凱蒂 | 59 | 0 |
| | 簡 | 55 | 0 |
| | 賈克琳 | 66 | 0 |
| | 莉莉 | 52 | 0 |
| 12歲男孩 | TIM | 60 | 1 |
| | 詹姆斯 | 61 | 1 |
| | 羅伯特 | 51 | 1 |
女孩的最大身高是 66,男孩的最大身高是 61,因此男孩組的最大身高最矮,因此新的公式列中 Tim、James 和 Robert 為 1,Katie、Louise 為 0 、簡等
這在公式列中可能嗎?
(我可以分享我嘗試過的方法,但我試圖避免 xyproblem, http://xyproblem.info這裡...)
基礎資料分析與建模數據探索和視覺化回覆:如何識別資料組中的最小值和最大值您可以使用 Col ... 聚合。
編輯:如果有人詢問每個年齡層身高最小的學生的性別:
首先使用 Col Min 找出每個年齡層身高最小的學生。
然後使用 Col Max 將這些知識傳播給所有同性學生。
所以:
New Column( "myCol",
Formula( Col Maximum( :height == Col Minimum( :height, :age ), :sex, :age ) ),
)
正如你所要求的
公式列,如果該組的男女性別中的最大身高最矮,則為1,否則為 0
該方法必須糾正為
New Column( "myCol",
Formula(
Col Maximum(
:height == Col Min( Col Maximum( :height, :age, :sex ), :age ),
:sex,
:age
)
)
)
沿著以下想法:
- 每個年齡和性別的最大身高是多少
- 取得這些值並找到每個年齡的最小(最大)身高
- which student?
[啊,不,我們不想要一個隨機的學生,我們只想要一個最大身高的學生!
-> replace :height with Col Maximum( :height, :age, :sex ) *) </CODE>use col max to spread the 1 to all other students with the same sex and age</STRIKE><BR /><STRIKE>如果有一個男孩和一個女孩身高相同,則將其他性別設為 0 - 或 1。</STRIKE><BR /><FONT face="comic sans ms,sans-serif" color="#999999">這部分我們不再需要了</FONT><BR /><FONT face="comic sans ms,sans-serif" color="#999999">……我們最終得到了 Jarmo 的解決方案(見下文)</FONT><BR /><BR /></LI></UL></LINGO-BODY><LINGO-SUB id="lingo-sub-821774" slang="en-US" mode="CREATE">回覆:如何識別資料組中的最小值和最大值</LINGO-SUB><LINGO-BODY id="lingo-body-821774" slang="en-US" mode="CREATE"><P>XY問題:<BR />謝謝 : )</P></LINGO-BODY><LINGO-SUB id="lingo-sub-821776" slang="en-US" mode="CREATE">回覆:如何識別資料組中的最小值和最大值</LINGO-SUB><LINGO-BODY id="lingo-body-821776" slang="en-US" mode="CREATE"><P>哇,這似乎可行,但我的大腦甚至無法理解這是如何運作的...</P><P> </P><P>讓我試著在這裡解開它,也許你可以幫助我理解——</P><P> </P><P>開頭為: Col Maximum( :height == Col Minimum( :height, :age ), :sex, :age )</P><P> </P><P>Col Maximum( :height, :age ) --> 傳回該年齡層所有學生的最小身高</P><P> </P><P>:height == Col Maximum( :height, :age ) --> 如果該行的高度列與最小高度匹配,則傳回 true/false (1/0)</P><P> </P><P>Col Maximum( <1 or 0 for this row> , :sex, :age ) --> 呃...這沒有意義,我認為列最大通過按分組列對數據進行分組來工作(:sex, :年齡) ,然後找到第一個參數中的值或列的列最大值(現在只是一個true/false 或1/0),然後傳回該行組的對應最大值,即該行的:sex 和:age 的值。</P><P> </P><P>顯然這是錯誤的,我在這裡錯過了什麼?</P><P> </P><P> </P><P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-821779" slang="en-US" mode="CREATE">回覆:如何識別資料組中的最小值和最大值</LINGO-SUB><LINGO-BODY id="lingo-body-821779" slang="en-US" mode="CREATE"><P>執行此操作的方法有很多,例如使用 col 統計函數的不同組合(如已經顯示的)。這是其他選項(我認為它應該滿足您的需求)</P>
<P> </P>
<PRE><CODE class=" language-jsl">Col Min(Col Max(:height, :age, :sex), :age) == Col Max(:height, :age, :sex)
首先 Col Min() 尋找年齡、性別組超過年齡的 Col Max(),然後將其與年齡、性別組最大值進行比較,如果與年齡組最小值相同 -> 值為 1。
為了更容易理解這些,我認為將它們全部寫成單獨的並且使它們更容易理解是有益的,在這種情況下:
First column with Col Max(:height, :age, :sex) (max_height_for_agesex)
- Next column then utilizes that
Col Min(:max_height_for_agesex, :age) age_minmax_age
- And the final one is the comparison of these two
:max_height_for_agesex == :age_minmax_age
回覆:如何識別資料組中的最小值和最大值謝謝@jthi——不過我還是很困惑。
從這個開始:
Col Min(Col Max(:height, :age, :sex), :age) == Col Max(:height, :age, :sex)
當 JMP 計算「Col Max(:height, :age, :sex)」時,它會回傳什麼?單一值?或者一個清單?
我可以用它作為公式建立一個新列,它會產生一個值列表,這些值最終出現在該列的行中。
但在公式中,它似乎會傳回單一值,例如:
a = col max(:height, :name);
type(a);
....回傳“數字”。
如果我建立一個新腳本並輸入:
a = col max(:height, :name); <BR />show(a);
它說“無效行號”,但如果沒有“,:名稱”,它可以正常返回 70。這是如何運作的?有什麼地方解釋過嗎?
回覆:如何識別資料組中的最小值和最大值當您執行儲存格中公式列的公式時,它會計算目前行的值。
當您在 JSL 中執行它時,它會針對目前行進行計算。
聽起來一樣。但「目前行」的預設值為「第 0 行」-即沒有有效數字。
您也可以檢查任何行的計算 - 與預設的“0”不同。
只要在計算前加入row()=xy即可計算行xy 。
所以,例如
row()=5;
col max(:height, :age)
將返回 66。
:age in row=5為12 , age =12的最大高度為66 。
回覆:如何識別資料組中的最小值和最大值我想它的工作原理是這樣的:
Col ...首先遍歷所有行並儲存第一個參數的結果。
它逐行計算 - 例如,如果第一個參數是隨機的uniform() 。
此外,它還儲存附加組參數的查找表。
然後,它將資料拆分為子集,計算聚合值,然後將聚合值指派回各個行。
回覆:如何識別資料組中的最小值和最大值
當 JMP 計算「Col Max(:height, :age, :sex)」時,它會回傳什麼?單一值?或者一個清單?
單一值。
如果您建立腳本並希望測試正在發生的情況,則必須使用 Row() 如果您正在按列使用(如果不按列,它將起作用,因為 JMP 知道使用所有行)。 Row() 在JMP 中預設為0,因此您必須將其更改為Row() = 1。 (可能是相關的) Row()、For Each Row 或 Col 統計函數)。
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
max_height = Col Max(:height); // works fine as no by var used and uses all rows
Show(Row());
Col Max(:height, :age); // won't work as JMP doesn't know which age to use -> it needs row information
Row() = 1;
cur_age = :age;
cur_maxheight = Col Max(:height, :age);
Write("\!Max height for age ", cur_age, " is ", cur_maxheight);回覆:如何識別資料組中的最小值和最大值聽起來您好像在說 JMP 將整個列公式包裝在一個循環中,該循環在表的行上迭代“Row()”,計算每行的值。
除了這個表達式之外,這*會*有意義:
Col Min(Col Max(:height, :age, :sex), :age)
……依照這個邏輯,當例如 Row() 設定為 i=1 時,它將計算 Col Max() 作為整個表的 :height 列中的最大值,其中 :age[i] == : Age[1 ] 和:sex[i] == :sex[1],傳回單一數字。然後它嘗試計算該單一數字的 Col Min(),根據定義,該數字只能是該數字。我真的很難讓這件事變得有意義。
我一直認為 Col Max() 必須傳回一個列表,然後 Col Min() 可以查看該列表中 :age[i] == :age[1] 的所有行。
但我的想法要求 JMP 做一些類似於 perl 所做的事情,基本上跟踪是否在標量或列表上下文中調用某些內容,即,如果以期望返回列表的方式使用函數,則它返回一個列表,否則它傳回一個標量。這樣,Col Max() 可以傳回 Col Min() 的列表,而 Col Min() 又會回傳標量值。
我猜我在這裡遺漏了一些東西並且無法指出它。
回覆:如何識別資料組中的最小值和最大值不,這個想法並不是 JMP 逐行遍歷表併計算整個表達式。
回覆:如何識別資料組中的最小值和最大值為了研究 JMP 正在做什麼,我們首先建立一個非常小的資料表...
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt = dt0 << Clear Select << Select Rows( [2, 10, 11, 25] ) << Subset( Selected Rows( 1 ), Selected columns only( 0 ) );
nr = n rows(current data table());
....以及具有一些日誌功能的公式列:
New Column( "test", Formula(Col Min(Write( "\!nmin:" || (Char( Row() )) );if(row()==nr, write("\!n") );:height, :age)));輸出:

因此,對於這種情況,JMP 會多次運行程式碼。
我們稍後再想知道...
回覆:如何識別資料組中的最小值和最大值現在讓我們檢查一下
New Column( "test",
Formula(
Col Min(
Write( "\!nmin:" || (Char( Row() ) || "\!n\!n") );
Col Max(
Write( "max:" || (Char( Row() ) || "\!n") );
:height;,
:age,
:sex
);,
:age
)
)
)
....我們得到*)

其中顯示:
- 對於簡單範例,JMP 計算每行的Col Min的第一個參數
- 對於第二個版本,JMP 計算每行的Col Min的第一個參數- 由於此程式碼中還有另一個Col...聚合,因此後面是ColMax循環:每行的Col Max的第一個參數
最後,JMP 知道每一行的ColMax(...)值,然後可以使用這些值計算Col min 。
這或多或少就是你所說的——在列表上下文中。但我認為 JMP 將結果儲存在資料表上下文中。這樣它就可以將 VALUES 與附加資訊(如row()、row states() ..)結合。
但來自 JMP 或@jthi的人可能會解釋得更好...
*) 再次:多次:
更多詳細資訊可以在這裡找到:
https://community.jmp.com/t5/Discussions/Statistical-functions-Col-Mean-for-example-possibility-bugged-on/mp/613887/highlight/true#M81398
回覆:如何識別資料組中的最小值和最大值另一種測試程式碼執行的方法:
i = 0;
j = 0;
New Column( "test",
Formula(
Col Min(
i++;
Col Max(
j++;
:height;,
:age,
:sex
);,
:age
)
)
);
// too early
Show( i );
Show( j );
Current Data Table() << run formulas();
// after calculating the values
Show( i );
Show( j );

我 = 5 x 4
j = 5 x 5 x 4
回覆:如何識別資料組中的最小值和最大值-
回覆:如何識別資料組中的最小值和最大值Col 統計函數確實有其自身的魔力,而其他一些函數則沒有,例如它們具有內部緩存並支援 byvars。 https://www.jmp.com/support/help/en/18.0/#page/jmp/statistical-functions.shtml#
回覆:如何識別資料組中的最小值和最大值是的,這種準備資料的巧妙方法非常有幫助:
魔法如何發揮作用的例子:
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Clear Select << Select Rows( Index( 5, 40 ) ) <<DELETE rows=""></DELETE>newCol << Set Formula(Col Min(Print(row());:height,:age)); // 2 x 4<BR /><BR />newCol << Set each value(Col Min(Col Max(Print(row());:height,:sex),:age)); // 4 + 4
newCol << Set Formula(Col Min(Col Max(Print(row());:height,:sex),:age)); // 2 x 4 + 4
請確保您不會遇到以下水龍頭之一:
i=1;<BR />newCol << set each value (Col Min(Print("X");:height,:age)); // 16 = 4 x 4
newCol << set Formula (Col Min(Print("X");:height,:age)); // 20 = 5 x 4<BR />newCol << set Formula (Col Min("x";Print(3);:height,:age)); // 20 = 5 x 4
newCol << Set Formula(Col Min(i;Print(row());:height,:age)); // 20 = 5 x 4<BR />
newCol << set each value (Col Min(Col Max(Print("X");:height,:sex),:age)); // 80 = 5 x 4 x 4
newCol << set Formula (Col Min(Col Max(Print("X");:height,:sex),:age)); // 100 = 5 x 5 x 4<BR />newCol << set Formula (Col Min(Col Max("X";Print(3);:height,:sex),:age)); // 100 = 5 x 5 x 4
newCol << Set Formula(Col Min(Col Max(i;Print(row());:height,:sex),:age)); // 100 = 5 x 5 x 4
當他們看到時,上校聚合會變得謹慎
然後他們切換到降低的速度併計算分層樹中每行的每個值(+1)......。
回覆:如何識別資料組中的最小值和最大值不確定我是否足夠聰明來關注你在這裡所做的一切——
聽起來你很同意我的觀點?即 Col ... 函數在標量和列表上下文中執行不同的操作?
回覆:如何識別資料組中的最小值和最大值讓我們等一年再討論——事情可能會改變。