String_Aggregationを使用した要約こんにちは、
次のようなテーブルをコーディングするにはどうすればよいですか。
-文字に基づいてグループ化され、
-conact_itemsを使用して対応するセルを作成します(たとえば、で区切ってください)。
-SQLコードのように "SELECT sex、String_Agg(Name、 '、')as ConcatName FROM'Big Class '" GROUP BY sex
これはループで可能になることはわかっていますが、別のもっとエレガントな方法があるかどうか疑問に思いました。
「ビッグクラス」テーブルに基づくと、結果は次のようになります。
セックスConcatName
f KATIE、LOUISE、...。
m TIM、JAMES、..。
どうもありがとう
スクリプティングRe:String_Aggregationを使用した要約表形式のプラットフォームには、連結要約関数が必要なようです。サマリーテーブルの各行で単一のループを使用する1つの方法を次に示します。
Names default to here(1);
dt = Open("$Sample_data/big class.jmp");
//Table with each unique sex and count
dtSum = (dt << Tabulate(
Add Table( Row Table( Grouping Columns( :sex ) ) )
)) << Make Into Data Table;
//blank column for concatenated names
dtSum << New Column("Names", Character, "Nominal");
//loop for each row/sex
for each row(dtSum,
// Use Eval and eval expression to insert the sex of the current
// row into the where expression of the other table
Eval(Eval Expr(
//fill in the names one row at a time, joining all values together
:Names = char( Concat Items(
//get names from main table matching the sex of the summary table
dt:name[ dt << Get Rows Where( dt:sex == Expr(:sex) ) ],
","
) )
))
);
Re:String_Aggregationを使用した要約これは、JSL(JMP 15)を使用した試みです。 変換列と結合列を使用して、インタラクティブに実行することもできます。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt1 = dt << Transpose( columns( :name ), By( :sex ), Output Table( "Test" ) );
dt1 << Combine Columns(
delimiter( ", " ),
Columns( 3 :: N Col( dt1 ) ),
Selected Columns are Indicator Columns( 0 ),
Column Name( "ConcatName" )
) << deletecolumns( 2, 4 :: N Col( dt1 ) );
Re:String_Aggregationを使用した要約@ihそして@MS良い答えが返ってきましたが、私はすでにこのソリューションに取り組んでいたので、JSLを介してこれを行う別の方法を示すために投稿したいと思いました。
を利用してサブセット作成者のオプションサブセットサブグループごとにテーブルを取得し、[名前]列から値を取得して使用できます。 Concat Items()名前の文字列を作成します。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt_list = dt << Subset(
By( :sex ),
All rows,
Selected columns only( 0 ),
columns( :name, :age, :height, :weight ),
private
);
nt = New Table();
group_col_name = Word( 1, dt_list[1] << get name, "=" );
nt << New Column( group_col_name, character );
nt << New Column( "concat name" );
nt << add rows( N Items( dt_list ) );
For( i = 1, i <= N Items( dt_list ), i++,
Column( nt, group_col_name )[i] = Word( 2, dt_list[i] << get name, "= " );
nt:concat name[i] = Concat Items( dt_list[i]:name << get values, ", " );
);
For( i = 1, i <= N Items( dt_list ), i++,
Close( dt_list[1], nosave )
);
dt_list = Empty();
Re:String_Aggregationを使用した要約Subset(By()...)がリストを返すことを私は知りませんでした。 非常に便利です。 ありがとうジェフ!
/マーカス