グループ内のユニークなケースのカウンターを追加こんにちは、みんな、
これを行うには、グループ A 内の列 B の一意の値をインクリメントする整数値カウンターを作成するにはどうすればよいですか?

これが私がこれまでに試したことです:
dt_Table1 = Data Table("Table1");
dt_Table1 << New Column("Dataset", Numeric, "Nominal", Set Selected);
Sum1 = dt_Table1 << Summary(Group(:Group, :Date));
Sum2 = Sum1 << Summary(Group(:Group));
:N Rows << Set Name("N Datasets in Group");
dt_Table1 << Update(
with(Data Table(Sum2)),
Merge Same Name Columns
Match Flag(0),
Suppress foruma evaluation(0),
By Matching Columns(:Group = :Group),
Drop multiples(1, 0),
Include Nonmatches(0, 0),
Preserve main table order(1)
);
dt = dt_Table1;
For(i = 1, i <= :N Rows(dt), i++,
While(Group_Number = GetValue(:Group[i]),
N == Get Value(dt, :N Datasets in Group[i]),
For(j = 1, j <= N, j++,
:Dataset << Set Value == (j),
),
Group_Number = Group_Number + 1,
),
);
出力:


自動化とスクリプト基本的なデータ分析とモデリングRe: グループ内のユニークなケースにカウンターを追加するこれは、Col Rank()、Col Cumulative Sum、Col Min() などの関数を組み合わせて実行できるはずです。 あなたの例に基づいて、 Col Rank() または Col Cumulative Sum(1, ) で十分です (どのグループにも重複する日付はありません)。
列 3 は列ランクと列 4 列累積合計と列 5 はもう少し複雑な数式の 1 つのオプションを使用しています
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(8),
Compress File When Saved(1),
New Column("g", Numeric, "Continuous", Format("Best", 12), Set Values([1, 1, 1, 1, 2, 2, 2, 2])),
New Column("d", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3, 4, 1, 2, 2, 3])),
New Column("r", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3, 4, 1, 2, 2, 3])),
New Column("Column 3", Numeric, "Continuous", Format("Best", 12), Formula(Col Rank(:d, :g))),
New Column("Column 4", Numeric, "Continuous", Format("Best", 12), Formula(Col Cumulative Sum(1, :g)))
);
dt << New Column("Column 5", Numeric, Continuous, Formula(
Col Cumulative Sum(
If(Row() == Col Min(Row(), :g, :d),
1
,
.
),
:g
)
));

Re: グループ内の固有のケースのカウンターを追加するありがとうジャーモ!あなたのやり方の方が断然きれいです。ロジックに完全には従っていませんが、うまくいくことがわかりました。
注: Col Cumulative Sum() を使用する別の方法を見つけました。あなたよりも遅いです。複数のサブテーブルと結合...
Summary1 = Table1 << Summary(Group(:Group, :Date));
Summary2 = Summary1 << Summary(Group(:Group, :Date));
概要 2 << 新しい列( "データセット",
数値、
「公称」、
選択したものを設定
);
:Dataset << Formula(Col Cumulative Sum( :N Rows, :Group ) );
//テーブル1に結合
表1 << 結合(
( データ テーブル( Summary2 ) )、
すべて選択)、
SelectWith(
:データセット
)、
列を一致させる( :Run = :Run )、
倍数 ( 1, 0 ) を削除します。
不一致を含める( 0, 0 )、
メインテーブルの順序を保持( 1 )、
出力テーブル名( "Table2" )
);
Re: グループ内の固有のケースのカウンターを追加するこの数式を使用して新しい列を作成します。
もしも(行() == 1 、
1 、
もしも( :ID ==遅れ( :ID, 1 )、
遅れ( :名前( 「IDの数」 ) ) + 1 、 1 ))
これは、「ID」列が順番にソートされていることを前提としています。
ID の数、列は上記の式で作成される新しい列の名前です。
Re: グループ内の固有のケースのカウンターを追加するうーん、数式エディターにコルNのカテゴリー機能付きGroupBy オプション。
ウィッシュは称賛を待っています:
新しい JSL 関数: Col N カテゴリ
Re: グループ内の固有のケースのカウンターを追加するこれは、列 A 内の列 B で見つかった一意の値の数を生成する小さなスクリプトです。
Names Default To Here( 1 );
dt = new table("Example",
New Column("A", character),
New Column("B", character)
);
charList = {"A","B","C","D","E","F","G","H","I","J"};
dt << add rows(25);
for each row(
:A = char(random integer(1,5));
:B = charList[random integer(1,10)]
);
dt << New Column( "count",
set each value(
As Constant( Summarize( dt, bygroup = by( :a, :p</img> ) ) );
N Items( Loc( bygroup[1], :a ) );
)
);Re: グループ内の固有のケースのカウンターを追加する素晴らしい回避策:)
(p -> b)
しかし、欠けているコルNのカテゴリーまだ痛い。 追加できますかカスタム関数コルNのカテゴリー(: 列、<{...}>)
オプションのリストは、前の例の :a のように、 by として使用される列/サブグループを指定するために使用できます。
集計関数で列をどのように参照できるか誰が知っていますか?
カスタム関数 - 列を参照する方法
Re: グループ内の固有のケースのカウンターを追加する通常、さまざまな Col something() 関数の奇妙な組み合わせも使用できます (比較が行われるため最速ではない可能性があります。私の記憶が正しければ、これが最良の方法の 1 つであるにもかかわらず、この方法で Col 関数を使用するべきではありません)。それらを使用します)。
dt << New Column("C", Formula(
Col Sum(Row() == Col Min(Row(), :A, :B), :A);
));
Re: グループ内の固有のケースのカウンターを追加する
追加できますかカスタム関数コルNのカテゴリー(: 列、<{...}>)
きれいで良い方法ではありませんbyVarを持つ統計カスタム(数式)関数の作成、カスタム列の式を一度に評価したり、行間の値をキャッシュしたりするためのオプションまたは関数
Re: グループ内の固有のケースのカウンターを追加する
@jthi書きました:
きれいで良い方法ではありません
ああ!
カスタムを追加したかったコルNのカテゴリー関数を右クリックして [新しい数式列] メニューで使用できるようにします。
したがって、追加が必要な場合は、 Expr()関数を呼び出すときに列の周りの式、これを正しく理解する機会はありませんか?
ああ……
欠けているものを追加するのにこれほど時間がかかるのは本当に驚くべきことですコルNのカテゴリー
Re: グループ内の固有のケースのカウンターを追加するすばらしい!
テーブルの構造によっては、何桁も高速になります:)
しかし、解決にはまだ程遠い右クリック新しい数式列メニュー:(
Names Default To Here( 1 );
dt = new table("Example",
New Column("A", character),
New Column("B", character)
);
dt << add rows(20000);
for each row(
:A = char(random integer(1,5));
:B = char(random integer(1,1000));
);
t0 = hptime();
dt << New Column( "count",
set each value(
As Constant( Summarize( dt, bygroup = by( :a, :b) ) );
N Items( Loc( bygroup[1], :a ) );
)
);
(hptime() -t0)/1000000; //~ 1min
t0 = hptime();
dt << New Column("C", set each value(
Col Sum(Row() == Col Min(Row(), :A, :B), :A);
));
(hptime() -t0)/1000000; // < 1secグループ内のユニークケースのカウンターを追加する嬉しいニュース: JMP19 はユニークN列()を提供します:
https://community.jmp.com/t5/JMP-Wish-List/Col-N-Categories/idc-p/870972/highlight/true#M7292
新しい数式列メニューから利用できるようになります。
