複数のテーブルからのデータの結合2 つ (またはそれ以上) のテーブルからデータを組み合わせて、新しいマスター テーブルを作成しようとしています。例として、以下のテーブル A とテーブル B を結果としてテーブル AB に結合しようとしています。



基本的に、テーブル A とテーブル B の両方に「開始」と「終了」の列は似ていますが、行ごとに範囲が異なります。私がやろうとしているのは、両方のテーブルから開始距離 1 から 20 までのセグメントを結合し、テーブル AB に結合することです。
スクリプトまたはテーブル関数を使用してこれを実行する方法について何かアイデアはありますか?
高度な統計モデリング自動化とスクリプトコンテンツの編成マスカスタマイゼーション結果の共有と伝達Re:複数のテーブルのデータを組み合わせるこれにより、スクリプトを使用してこれを行う方法がわかります。
Names Default To Here(1);
dt1 = New Table("Table A",
Add Rows(4),
Compress File When Saved(1),
New Column("Start",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([1, 5, 10, 15])
),
New Column("End",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([5, 10, 15, 20])
),
New Column("Name", Character, "Nominal", Set Values({"A", "B", "C", "D"}))
);
dt2 = New Table("Table B",
Add Rows(5),
Compress File When Saved(1),
New Column("Start",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([1, 4, 8, 12, 16])
),
New Column("End",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([4, 8, 12, 16, 20])
),
New Column("Name",
Character,
"Nominal",
Set Values({"X1", "X2", "X3", "X4", "X5"})
)
);
//create collection table
dt_final = New Table("Table A-B",
Compress File When Saved(1),
New Column("Start", Numeric, "Continuous", Format("Best", 12)),
New Column("End", Numeric, "Continuous", Format("Best", 12)),
New Column("Name", Character, "Nominal")
);
For Each Row(dt1,
startVal = Column(dt1, "Start")[Row()];
endVal = Column(dt1, "End")[Row()];
nameVal = Column(dt1, "Name")[Row()];
r_dt2 = dt2 << get rows where(startVal <= :Start <= endVal | startVal <= :End <= endVal);
For(i = 1, i <= N Items(r_dt2), i++,
newEnd = Min(Column(dt2, "End")[r_dt2[i]], endVal);
newName = nameVal || " " ||Column(dt2, "Name")[r_dt2[i]];
newRow = EvalList({startVal, newEnd, newName});
dt_final << Add rows({Start = newRow[1], End = newRow[2], Name = newRow[3]});
startVal = newEnd;
endVal= Max(Column(dt2, "End")[r_dt2[i]], endVal);
);
);
Close(dt1, no save);
Close(dt2, no save);Re:複数のテーブルのデータを組み合わせるLoc Sorted()を使用して、JSLバージョンのテーブルルックアップでこれに取り組むこともできます。
乾杯、
ブレイディ
Names Default To Here( 1 );
dt1 = New Table( "Table A",
Add Rows( 4 ),
Compress File When Saved( 1 ),
New Column( "Start", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 5, 10, 15] ) ),
New Column( "End", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [5, 10, 15, 20] ) ),
New Column( "Name", Character, "Nominal", Set Values( {"A", "B", "C", "D"} ) )
);
dt2 = New Table( "Table B",
Add Rows( 5 ),
Compress File When Saved( 1 ),
New Column( "Start", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 4, 8, 12, 16] ) ),
New Column( "End", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [4, 8, 12, 16, 20] ) ),
New Column( "Name", Character, "Nominal", Set Values( {"X1", "X2", "X3", "X4", "X5"} ) )
);
//////////// Begin processing here...
ends = Matrix( Associative Array( Concat( As List( dt1:End << get values ), As List( dt2:End << get values ) ) ) << get keys );
starts = [1] |/ ends[1 :: (N Row( ends ) - 1)];
dt3 = As Table( starts || ends, <<COLUMN names=""></COLUMN>Re:複数のテーブルのデータを組み合わせる@jthi & @brady_brady回答ありがとうございます。 提供されたソリューションは機能すると確信していますが、最初にそれらを消化したいと思います。それらが私の意図を満たしている場合は、ここに返信します。 助けに感謝します! 投稿してください。
Re:複数のテーブルのデータを組み合わせる少し考えた後、これをインタラクティブに行う方法を見つけました。 説明するのではなく、プロセスについて説明する短いビデオを添付しました。 インタラクティブなアプローチには、組み合わせるテーブルの数に関係なく、同じ量の作業(それほど多くはない)であるという利点があります。 私の例では、3を使用します。 欠点は、直感的でない並べ替えが必要になることです。並べ替えを間違えると、間違った結果が得られます。
このスクリプトを実行して、例で使用するテーブルを生成します。
Names Default To Here(1);
dta = new table("A",
<<ADDROWS></ADDROWS>