新しい列: ユニークなランクこんにちは、
値 1、2、3 ~ N を持つ列を作成して、別の列の一意の値にラベルを付けたいと考えています。
コミュニティには同様の投稿がいくつかあります
列 A の一意のグループ化に基づいて数値を持つ新しい列を作成する方法
ユニークなランク
さまざまなソリューションを備えています。
しかし、私はこれまでのところ、唯一の素晴らしい解決策を見つけることができませんでした。
そのはず
- 動的 (テーブルの変更に反応) -> テーブル/サマリーなし、コードへのラベルなし
- 列のタイプに依存しない (少なくとも: 文字 + 数値) -> コードにラベルを付けない
- ソートされていないテーブルでも機能 -> 遅延なし
- 高速 -> 連想配列なし
最適: (*) のような短い関数
rank unique(:col1)
または関数のオプション (**)
rank(:col1, << unique(1))
オプションを見つけました
rank(:col1, << tie(mode))
しかし、私は見つかりませんでしたモードこれにより、数値 1、2、3 ...が生成されます。 N
を使用すればそこに到達できると思いましたランク2回:
New Column( "step1",Formula( Col Rank( :sex, <<TIE></TIE>
しかし、ステップ 2 は、ステップ 1 列に関する、ユーザーには見えないいくつかの秘密を知っています。

機能するもの:
New Column( "Rank[sex]",
Formula(
If(row() == 1,summarize(values= by(:sex)));
Contains( values, :sex )
)
);
(*) または (**) をまだ検索中ですが、[新しい数式] 列を右クリックしてコンテキスト メニューで見つけられることを願っています。 しかしここで?
データのブレンディングとクリーンアップRe: 新しいコラム: ユニークなランクこのタスクを実行できる単一の Col 関数はありません。 Col 関数を使用してこれを行うこともできますが、必要な関数はほとんどなく、Summarize (または連想配列) を使用するよりも遅くなります。密なランキングを Rank Tie 関数と Col Rank 関数に追加する
Re: 新しいコラム: ユニークなランクウィッシュリストのエントリーは残念だ - とても良いものがあるのに - 注目されないままだ。
どうしてこれを見逃してしまったのでしょうか...
→こちらから工藤です。
Re: 新しいコラム: ユニークなランクJMP コミュニティでは検索が最適ではないので、独自のランキングなど、タイトルにもっと「キーワード」を追加する必要がありました。 これは私が仕事で時々直面する問題ですが、幸いなことに (少なくともまだ...) 計算速度は問題ではないか、動的公式は必要ありません。
Re: 新しいコラム: ユニークなランク検索: コミュニティの使用について投稿していただきありがとうございます。
そのときから、私はあなたの提案に従って、常に Google 検索を使用し、ブラウザにショートカットも追加しました。
以前は、コミュニティに投稿を送信し、それを開いて右側にある「関連投稿」の候補を確認するのが良い方法でしたが、コミュニティのレイアウトが更新されてからは、この機能が見つかりません。
ランクユニークのための素晴らしいアプリケーション:
グラフ ビルダーで、ウェーハをグループ X ドロップ ゾーンに配置し、バリアントをグループ Y ドロップ ゾーンに配置すると、DOE がなく、すべてのウェーハにバリアントが 1 つだけある場合、白い領域が多く含まれる非常にまばらなプロットが得られます。
そうすると、グループ X のドロップ ゾーンのランク 1、2、3 ... と、ホバー ラベル経由でウェーハ情報が得られるのは素晴らしいことです。
動的バージョンを使用することは必ずしも必須ではありませんが、テーブルの更新後に値が自動的に調整されると、古い値が存在しないことが保証されるため、より良い感触が得られます。
連想配列は、かなりの長さのデータではすでに非常に遅くなります。データを保存しないと本当に危険です...
Re: 新しい列: ランクユニークうーん、Jmp 18 でも同じです:

グループ内の一意のケースにカウンターを追加する@jthiのアイデアに従います:
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
New Column( "rank_unique (sex) by age",
Formula(
Col Minimum(
Col Rank( If( Row() == Col Min( Row(), :age, :sex ), 1 ), :age ),
:age,
:sex
)
)
)
- 性別×年齢の最初の値のみ
- ランクを生成する
- Col Minimumを使用して値を他の行にブロードキャストします