自訂函數中的列引用有這張表:
New Table( "test table",
Add Rows( 9 ),
New Column( "By column",
Character( 1 ),
"Nominal",
Set Selected,
Set Values( {"a", "a", "a", "b", "b", "b", "c", "c", "c"} )
),
New Column( "Categories",
Character( 1 ),
"Nominal",
Set Values( {"t", "t", "r", "y", "t", "r", "r", "r", "r"} )
),
New Column( "N Categories",
Expression,
"None",
Formula(
If( Row() == 1,
Summarize( x = by( :By column, :Categories ) ),
Empty()
);
N Items( Loc( x[1], :By column ) );
),
Set Display Width( 109 )
),
Set Row States( [1, 0, 0, 0, 0, 0, 0, 0, 0] )
)我想建立一個自訂函數,執行與 N 個類別列中的公式相同的操作。
在公式編輯器中將其轉換為自訂函數腳本會給我這樣的結果:
Add Custom Functions(
{New Custom Function(
"custom",
"N Categories",
Function( {Categories,By column},
{Default Local},
If( Row() == 1,
Summarize( x = by( By column, Categories ) ),
Empty()
);
N Items( Loc( x[1], By column ) );
),
<<DESCRIPTION></DESCRIPTION>但現在參數(之前是列引用)變成了包含行值的參數。
所以我的問題是:是否可以建立一個將參數視為列引用的自訂函數?
我可以通過將參數視為列名並傳輸字串來使其工作,但它不會相同!
回覆:自訂函數中的列引用
@約翰_馬登寫道:但是,如果我想為不期望這種解決方法的天真的用戶編寫可以在列公式中乾淨工作的自訂函數
除了幼稚的用戶,這也是 Jmp 本身:可用解決方案失敗的「轉換函數」。
回覆:自訂函數中的列引用關於B計劃,引用一個列,我剛剛收到 Jmp 支援 TS-00063463 的回复

回覆:自訂函數中的列引用看來我被同樣的問題困擾了:
自訂函數 - 如何引用列
....即使是相同的應用案例。
關於 count unique,有一個願望清單條目正在等待 Kudos:
新的 JSL 功能:Col N 類別
關於問題引用列,有一個願望 - 實際上相關,但主題不同:
用於立即計算自訂列公式或快取行之間的值的選項或函數
……但儘管如此,它在最後一句中提到了引用列的問題:

回覆:自訂函數中的列引用我只想說,到目前為止我能想到的最好的方法——這並不是我真正想要的——是將列參數包含在 Name Expr() 指令中。 例如,給定一個包含名為「:Column 1」的欄位的資料表,此方法有效:
Names Default To Here( 1 );
dt = Current Data Table();
Add Custom Functions(
New Custom Function(
"x",
"Testf",
Function( {col},
{i},
For Each Row( dt, Print( col ) );
)
)
);
x:Testf(Name Expr(dt:Column 1));但你不能這樣做:
dt = Current Data Table();
Add Custom Functions(
New Custom Function(
"x",
"Testf",
Function( {Name Expr(col)}, // JSL interpreter gives error for this syntax
{i},
For Each Row( dt, Print( col ) );
)
)
);
x:Testf(dt:Column 1); // hypothetical, as the function definition is in error回覆:自訂函數中的列引用我想重新提出這個問題,因為我也一直在這個問題上掙扎——似乎永遠如此。
有誰有可靠的方法來編寫自訂函數(使用者函數),以便它接受列引用(例如:Column 1)作為參數?
我的解決方法始終是將列名作為字串傳遞,然後在函數內部根據情況使用 Column() 或 As Column() 來產生參考。
但是,如果我想編寫可以在列公式中為不期望這種解決方法的天真的用戶乾淨地工作的自定義函數,那麼如果能夠傳遞列引用或列名稱(就像一個人所做的那樣,或者看起來是這樣),那就太好了,對於本機函數)。
約翰
回覆:自訂函數中的列引用感謝您的回覆。 後來我意識到還有一些其他問題,例如 x 不能是本地的,但這可以解決。
但我不知道如何在函數呼叫中傳遞列引用。 我前段時間遇到了類似的問題,並解決了將列名作為字串傳遞的問題。 如下例所示,它有效:
names default to here(1);
Add Custom Functions(
{New Custom Function(
"NNE",
"N Categories",
Function( {Categories, ByColumn},{Default local},
If( Row() == 1,
Summarize( here:x = by( column(ByColumn), column(Categories) ) );
);
N Items( Loc( here:x[1], column(ByColumn)[row()] ) );
),
<<DESCRIPTION></DESCRIPTION>可以在列公式中這樣呼叫:

但它需要字串而不是列引用。 我可以重新表述我的問題:是否可以以某種方式更改上述內容,以便 N Categories 函數接受列引用而不是字串?
回覆:自訂函數中的列引用1.對於所有感到困惑並正在尋找「新增自訂函數()」的社群成員,這是 JMP 14 中新增的功能。
2. @托馬斯,我認為您不能期望您正在建立的函數與公式相同。您的公式不是通用公式,它是硬編碼公式,與您嘗試使用該函數執行的操作不同。所以自然會有差異。 我認為您需要考慮公式會是什麼樣子(如果它是通用函數),然後開發公式。請參閱下面我整理的類似通用公式。
