新しいテーブルを作成せずに、重複しない (単一列 ID) 行をメインテーブルに追加しますか?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />シナリオ: 新しいテーブルを作成せずに、重複しない回答者 ID レコードのみを含む毎日の調査データ ファイル (過去のすべての日を含む) をメイン テーブルに追加する必要がある (メイン テーブルで選択した行を失いたくないため)隠蔽または除外
2 つの試み:
連結はメインテーブルを維持しますが、すべてのレコードを引き継ぎます
結合では新しいレコードのみが作成されますが、新しいテーブルが作成されるため、行の特性 (非表示、除外) は失われます。
Re: 新しいテーブルを作成せずに、重複しない (単一列 ID) 行をメインテーブルに追加しますか?素晴らしい!!!
私が混乱したのは次の行でした。
Parse( "Col Min( Row(), :Name(\!"" || Concat Items( dt << 列名を取得( string ), "\!"), :Name(\!"" ) || "\ !"))" );
最初の引数の「Row()」が何をするのか分かりませんでした。
どうもありがとうございます。
Re: 新しいテーブルを作成せずに、重複しない (単一列 ID) 行をメインテーブルに追加しますか?こんにちは、マーティンさん
あなたは正しいです。これらの行は、あなたが推測したことを正確に実行します。他の人にもわかりやすくするために、いくつかのコメントを追加しました。
便利だと思っていただけて嬉しいです!
Re: 新しいテーブルを作成せずに、重複しない (単一列 ID) 行をメインテーブルに追加しますか?それで、私はそれを理解したと思います。1 行目では文字列「Col Min( Row(), :name, :age, :sex, :height, :weight )」が生成され、これは (2) ですべての列が一致する前の行の行番号を決定するために使用されます。 。そして、2は重複した行の行番号を配列「duplicates」に追加します。
これはかなり賢いですね。3つある場合はどうなるのか気になります。最初のインスタンスは常に保持され、2 番目と 3 番目のインスタンスは削除されますか?試してみる必要があります。
ありがとうロボット!
Re: 新しいテーブルを作成せずに、重複しない (単一列 ID) 行をメインテーブルに追加しますか?こんにちは、ロボットさん、この 2 行が何をするのか説明していただけますか?
THX
1.col_min = Parse( "Col Min( Row(), :Name(\!"" || Concat Items( dt << 列名を取得( string ), "\!"), :Name(\!"" ) || "\!"))" );
2. 各行について( If(col_min != Row(), 重複 |/= Row() ) );
Re: 新しいテーブルを作成せずに、重複しない (単一列 ID) 行をメインテーブルに追加しますか?こんにちは、cdwhite さん
少し前に役立つかもしれないスクリプトを書きました。以下のスクリプトは、数式や行の状態を含む元のデータ テーブルを保持しながら、重複した行を削除します。このスクリプトに続いて Concatenate 関数を使用すると、問題が解決される可能性があります。
名前のデフォルトは Here( 1 );
// データテーブルと新しいデータを作成します。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << ランダムに選択( 10 );
dt2 = dt << サブセット( (選択された行), 出力テーブル名( "新しいデータ" ) );
dt << 選択をクリア;
dt2 << 行の追加( {:name = "PETER", :age = 14, :sex = "M", :height = 61, :weight = 124} );
// 元のデータの行の状態をランダムに設定します。
dt << ランダムに選択( 10 ) << 非表示 << 除外 << 選択をクリア;
// 新しいデータを追加します。
dt << Concatenate( dt2, 最初のテーブルに追加 );
Close( dt2, 保存なし );
// 重複した行を削除します。
dt = 現在のデータ テーブル();
Col_min = Parse( "Col Min( Row(), :Name(\!"") || Concat Items( dt << 列名を取得( string ), "\!"), :Name(\!"" ) || "\!"))" ); // 他のすべての列による最小行番号を決定する JSL 式を作成します。
重複 = []; // 重複した行を格納する行列を作成します。
For Each Row( If(col_min != Row(), 重複 |/= Row() ) ); // 各行を上記の「col_min」式と比較します。現在の行が他のすべての列の最小行と一致しない場合、その行は「重複」行列に追加されます。
dt << 行を削除(重複); // 重複を削除します。
nn = N 行(重複);
New Window( "重複行を削除", <<モーダル, テキスト ボックス( "完了。" ), Text Box( Concat( "削除されました ", Char( nn ), " rows." ) )、ボタンボックス( "OK" ) );
Re: 新しいテーブルを作成せずに、重複しない (単一列 ID) 行をメインテーブルに追加しますか?メインテーブルの更新オプションを使用してみましたが、それでも新しいテーブルが作成されます。
データ表( "オリジナル" ) <<加入(
と(データ表( 「新しいデータ」 ) ) 、
アップデート、
列の一致による( :列ID = :列ID ) 、
複数をドロップする( 1 、 1 ) 、
名前( 「一致しないものを含める」 )( 0 、 1 ) 、
メインテーブルの順序を保持する( 1 )
);

Re: 新しいテーブルを作成せずに、重複しない (単一列 ID) 行をメインテーブルに追加しますか?結合を実行するときに、「2 番目のテーブルのデータでメインテーブルを更新する」オプションを使用すると、新しいテーブルの作成を回避できます。
Re: 新しいテーブルを作成せずに、重複しない (単一列 ID) 行をメインテーブルに追加しますか?ありがとう。行状態データ型として指定された新しい列を元のデータ テーブルに追加し、行状態メニューのコピー機能とコピー機能を使用して (実際の列ヘッダーではなく、左側の列リスト ボックスで行状態列をクリックします)結合後に行の状態を再適用します。行追加結合のスクリプトは、調査データ セットから新しいレコードのみをメイン データ テーブルに取り込みます (以前に追加されたケースはすべて無視します)。
Data Table( "主な調査データセット" ) << Join(
With( データテーブル( "二次調査データセット" ) ),
同じ名前の列を結合、
2 番目のテーブル式 ( 0 ) をコピーします。
メインテーブルの式の評価を抑制( 0 )、
列の一致( :ResponseID = :ResponseID )により、
倍数 ( 0, 0 ) を削除します。
Name( "一致しないものを含める" )(0, 1),
メインテーブルの順序を保持する( 1 )
)
2 つのファイルを結合した後、行状態メニューを使用して行状態列から行状態をコピー/復元しました。完璧に機能しました。ありがとう!
Re: 新しいテーブルを作成せずに、重複しない (単一列 ID) 行をメインテーブルに追加しますか?連想配列を使用して集合演算を実行できます。あるテーブルを別のテーブルに追加する巧妙な方法が見つかりませんでした。JSL ループを使用してデータを調べなければなりませんでした。
dt_オリジナル=新しいテーブル( "オリジナル" 、行の追加( 4 ) 、
新しい列( 「列ID」 、数値、継続的、フォーマット( "一番" 、 12 ) 、
設定値( [ 1 、 2 、 3 、 4 】 )
) 、
新しい列( "結果" 、キャラクター、公称、設定値( { 「あ」 、 「b」 、 「c」 、 「d」 } ) )
) ;
dt_new =新しいテーブル( 「新しいデータ」 、行の追加( 10 ) 、
新しい列( 「列ID」 、数値、継続的、フォーマット( "一番" 、 12 ) 、
設定値( [ 1 、 2 、 3 、 4 、 5 、 6 、 7 、 8 、 9 、 10 ] )
) 、
新しい列( "結果" 、キャラクター、公称、
設定値( { 「あ」 、 「b」 、 「c」 、 「d」 、 「え」 、 「ふ」 、 「ぐ」 、 「は」 、 "私" 、 「じ」 } )
)
) ;
// 新しいテーブルにある行のうち、古いテーブルにない行を判断します。
a_オリジナル=連想配列(桁( dt_オリジナル、 「列ID」 )) ;
新しい=連想配列(桁( dt_new 、 「列ID」 )) ;
新しい<<削除( a_オリジナル) ;
新しい行=新しい<<鍵を取得する;
// あるテーブルを別のテーブルに追加するより高速な方法が必要です
に=狭い( dt_オリジナル) ;
番号=ナイアイテム(新しい行) ;
dt_オリジナル<<行を追加する(番号) ;
ために(私= 1 、私<= ncols ( dt_オリジナル) 、私++、
1 列=桁( dt_オリジナル、私) <<名前を取得する;
ために( k = 1 、 k <=ナイアイテム(新しい行) 、 k ++、
メートル=新しい行[ k 】 ;
n = k +に;
桁( dt_オリジナル、 1 列)[ n 】 =桁( dt_new 、 1 列)[メートル] ;
) ;
) ;
Re: 新しいテーブルを作成せずに、重複しない (単一列 ID) 行をメインテーブルに追加しますか?私は、テーブルの結合と連結は少し芸術的だと感じています (つまり、本当に欲しいものを得るまで試行錯誤します)。ただし、現在の行状態 (つまり、非表示および除外された行状態) をすべて列に保存して、必要に応じてテーブルに再適用できるため、列タイプ「行状態」を検索することをお勧めします。