複数列(文字、公称)データテーブルがあります。 スタックされている列からの重複したエントリ/項目を無視して、最後の 4 つの列のエントリ/項目を同じデータテーブルの新しい列に取得したいと考えています。 JSL でこれを実現するにはどうすればよいでしょうか?
データがどのように見えるか、そして最終的にどのように見えるべきかがわからない場合、私の最善の推測は、次の組み合わせを使用することです。 Associative Array() << キーの取得そして連結アイテム()
@jthiありがとう。 しかし、これは重複を削除しますか?
私の列 (積み重ねられる) には、列間に共通の Char エントリがありますが、固有のエントリもあります。 それぞれを新しい列に保持し、重複を削除したいと思います。
連想配列キーを重複させることはできないので、そのようになります (また、順序付けされているため、順序が変更される可能性があります)。
これを行うには次のような方法があります。
- テーブルの操作:
- [テーブル] > [スタック] を使用して、列を 1 つの列にスタックします。
- [テーブル] > [概要] を使用し、その積み上げ列をグループ ロールとして使用します。
- JSL
- 列の値をリストに取得します
- list_of_values = 列(テーブル名, 列名) << 値を取得
- 別の列でこれを再度実行し、それらの値をリストに挿入できます。
- list_of_values = Insert Into(list_of_values, column(テーブル名, 別の列名) << 値を取得)
- 必要に応じて繰り返します
- 関連配列を使用して一意の値を取得します
- unique_values = (連想配列(値のリスト)) << キーを取得
- その値のリストをデータテーブルの新しい列に入れます
Names Default To Here( 1 );
// create table with 4 columns with random letters
nr = 20;
dt = New Table( "Example", addrows( nr ) );
letterlist = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q",
"R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
dt << New Column( "C1", character );
Column( dt, "C1" ) << set values( letterlist[J( nr, 1, Random Integer( 26 ) )] );
dt << New Column( "C2", character );
Column( dt, "C2" ) << set values( letterlist[J( nr, 1, Random Integer( 26 ) )] );
dt << New Column( "C3", character );
Column( dt, "C3" ) << set values( letterlist[J( nr, 1, Random Integer( 26 ) )] );
dt << New Column( "C4", character );
Column( dt, "C4" ) << set values( letterlist[J( nr, 1, Random Integer( 26 ) )] );
// Method 1
dtstack = dt << Stack(
columns( :C1, :C2, :C3, :C4 ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" ),
Output Table( "Stacked Values" )
);
dtstack << Summary(
Group( :Data ),
Freq( "None" ),
Weight( "None" ),
output table name( "Unique Values" )
);
//Method 2
list_of_values = Column( dt, "C1" ) << get values;
Insert Into( list_of_values, Column( dt, "C2" ) << get values );
Insert Into( list_of_values, Column( dt, "C3" ) << get values );
Insert Into( list_of_values, Column( dt, "C4" ) << get values );
Print( list_of_values );
unique_values = (Associative Array( list_of_values )) << get keys;
dtunique = New Table( "Unique Values" );
dtunique << New Column( "Unique Values", character );
Column( dtunique, "Unique Values" ) << set values( unique_values );
@jthiわかりました。 ありがとう。 これは正しい構文ですか?
aa = Associative Array( As Column(lastCH), As Column(2ndLastCH), As Column(3rdLastCH), As Column(4rthLastCH)) << get keys();
// Where "lastCH", "2ndlastCH", "3rdlastCH" and "4rthlastCH" are column headers for the last four columns in my data table, supplied from above
@SamGardner
これらは両方とも正常に機能しますが、実際のデータセットの場合のように行数がすべての列で同じでない場合は空の行が追加されます。
コードを挿入すると
remove from(unique_values, loc(unique_values,"")[1])
unique_values リストが作成される行の後では、空の文字列である値がリストから削除されます。
remove from(unique_values, 1)
キーは要求された順序でアルファベット順にソートされるため、これも機能するはずです。