名目データのアルファベット順ランキング入力が複数回発生する可能性がある名目データの列がある場合、出力が入力のアルファベット順になる列を作成する方法はありますか? スクリプトを使用することもできますが、単純な列式を使用することをお勧めします。
自動化とスクリプト基本的なデータ分析とモデリングRe: 名目データのアルファベット順ランキングもう遅い時間なので、私の解決策はおそらく最善ではないでしょうが、Big Classデータテーブルを使用して、私が思いついた式は次のとおりです。
As Constant( Summarize( theLevels = by( :age ) ) );
Contains( theLevels, Char( :age ) );

Re: 名目データのアルファベット順ランキングRanking Tie と Col Rank 関数に密なランキングを追加するまでは、txnelson が単純なケースで示したようなものを使用します。Col 統計関数を使用したさまざまなソリューションがありますが、複数の関数を互いに組み合わせる必要があるため、理解するのが非常に難しい傾向があります (そのウィッシュ リスト項目のコメントからいくつか見つけることができます)。
Re: 名目データのアルファベット順ランキング一方で -
これは非常に巧妙な回避策ですが、高密度ランキングが実装されるまでにはしばらく時間がかかるのではないかと心配しています。
ありがとう、ジム!!
Re: 名目データのアルファベット順ランキング
dt = Open( "$SAMPLE_DATA/Big Class Families.jmp" );
for(i=1, i<16, i++, dt<< Concatenate(dt,append to first table()));
wait(0);
show(nrows(dt));
Print("std rank");
t0 = hptime();
New Column( "std Rank",
Formula(
Col Rank( :height)
)
);
dt << run formulas();
show((hptime()-t0)/1000000);
Print("row_min rank median");
t0 = hptime();
New Column( "dense_Rank_ref1",
Formula(
Col Median(
Col Rank( If( Row() == Col Minimum( Row(), :height ), :height, . ) ),
:height
)
)
);
dt << run formulas();
show((hptime()-t0)/1000000);
print("summarize_contains");
t0 = hptime();
New Column( "dense rank_summarize_contains",
Formula(
As Constant( Summarize( theLevels = by( :height ) ) );
Contains( theLevels, Char( :height ) );
)
);
dt << run formulas();
show((hptime()-t0)/1000000);
print("row_min cumulative sum");
t0 = hptime();
print("- just works after sorting");
dt << Sort( By( :height ), Replace Table);
New Column( "dense_Rank_ref1",
Formula(
Col Cumulative Sum(If(Row() == Col Min(Row(), :height), 1,0))
)
);
dt << run formulas();
show((hptime()-t0)/1000000);
close(dt, nosave);Re: 名目データのアルファベット順ランキング2 倍の速さ: 要約表による迂回:

dt = Open( "$SAMPLE_DATA/Big Class Families.jmp" );
for(i=1, i<16, i++, dt<< Concatenate(dt,append to first table()));
t0 = hptime();
dtsum = dt << Summary( Group( :height ),private);
dtsum << New Formula Column(
Operation( Category( "Distributional" ), "Rank" ),
Columns( :height )
);
dtsum << run formulas();
dt << Update(
With(dtsum),
Match Columns( :height = :height ),
Add Columns from Update Table( :"Rank[height]"n ),
Replace Columns in Main Table( None )
);
show((hptime() - t0)/1000000)
このアプローチは、サブセット (groupBy) の密なランキングを計算するように簡単に拡張できます。
Re: 名目データのアルファベット順ランキングSummarize を使用する代わりに要約テーブルを作成すると、 @txnelsonアプローチを使用してサブセットの稠密ランクを計算できます。
欠点: かなり遅い

もっと見る...names default to here(1);
Try(close(dt,nosave));
dt = Open( "$SAMPLE_DATA/Big Class Families.jmp" );
for(i=1, i<16, i++, dt<< Concatenate(dt,append to first table()));
t0 = hptime();
//dense rank - with groupby
dt << New Column( "dense rank_ grouped by",
Character,
formula (
local({tmp,myAge},
as constant (
dt = Current Data Table();
dtsum = dt << summary( Group( :age, :height ) );
//dtsum:age << set name(age2);
nr = N Rows( dt );
);
rw = row();
myage = dt:age[row()];
Eval (Eval Expr(myrows = dtsum << get rows where( dtsum:age == Expr(myAge)))); // <- use dtsum:age !!!
tmp = contains(dtsum[myrows,2], dt:height[rw]); // <- use dt:height !!!!
if(row()==nr, close(dtsum, noSave));
tmp
)));
show((hptime() - t0)/1000000)
Re: 名目データのアルファベット順ランキングすべてをAs Constantに入れて、メイン部分が始まる前に「式」を停止した方がよいでしょう。
...超高速。
...小さなGUIの助けを借りて:非常に柔軟

...そして永久にスリープすることを許可されるメインコマンド経由:動的でも:)
Names Default To Here( 1 );
Try(
dt = Current Data Table(),
Caption( "no dat table" );
Stop();
);
updateLBox = Function( {t},
(t << sib) << setitems( (t << topparent)[listboxbox( 1 )] << getselected )
);
nw = New Window( "rank unique entries",
<<TYPE></TYPE><EM>ワークフロー\ビルディングブロック\列操作\RankUnique_with_ByGroup.jmpflow</EM>
Re: 名目データのアルファベット順ランキングになるだろう
これは本当に賢いですね。Ctrl ボタンを押したままにすると、グループ別に複数の値を入力できますが、入力数に応じて最後のエントリのみが処理されます。何か間違っているのでしょうか?