JSLクエリ:同じ列で同じ名前の行を検索し、次に日付を比較して後の日付を検索する
こんにちは、みんな、
以下にデータテーブルがあります、比較したいのですが、
1。SN列で最初に同じ名前行があるかどうかを調べます。
2。次に、同じ名前行を比較して、どちらの行が列 "date1"の後の日付であるかを調べます。
3。次にその行を "1"として列LLRに割り当てます。
下記のスクリプトを使用していますが、動作しません。デバッグする方法がわかりません。学習の手助けができますか?
dt = Current Data Table();
New Column( "LLR");
For( i = 1, i <= N Row( dt ), i++,
SNcol = Column( dt, "SN" )[i];
Datecol = Column( dt, "DATE1" )[i];
For( j = 1, j <= N Row( dt ), j++,
If( Column( dt, "SN" )[j] == SNcol,
Column( dt, "DATE1" )[j]>Column( dt, "DATE1" )[i],"1"
"0")));

再:JSLクエリ:同じ列で同じ名前の行を検索し、そして日付を比較し、それ以降の日付を見つける正確には何が必要かわからないが、Col Max()関数を使ってSNの後にグループ化された列式を試すことができます。
2つの例
dt = Current Data Table();
// Returns 1 for max DATE of each SN
dt << New Column("LLR", Formula(If(Col Max(:DATE1, :SN) == :DATE1, 1)));
// Returns 1 for max DATE of each replicated SN
dt << New Column("LLR2", Formula(If(Col Max(:DATE1, :SN) == :DATE1 & Col Number(:SN, :SN) > 1, 1)));
再:JSLクエリ:同じ列で同じ名前の行を検索し、そして日付を比較し、それ以降の日付を見つける私はあなたが求めていることを正確に理解したかどうかわからない。しかし、私が親密であれば、次のコードが役に立つかもしれません。もしあなたがJSLを使い始めるのであれば、それがどのように機能するかを理解するために 'Help> Scripting Index'を使うことをお勧めします。また、これを行うには多くの方法がありますが、この方法は他の方法よりも優れている場合とそうでない場合があります。
NamesDefaultToHere(1);
// Make a table to play with
dt = New Table( "Mark the Latest Date",
Add Rows( 25 ),
New Column( "Group",
Numeric,
"Nominal",
Format( "Best", 12 ),
Formula(RandomInteger(1, 5))
),
New Column( "DateTime",
Numeric,
"Continuous",
Format( "ddMonyyyy h:m:s", 22, 0 ),
Input Format( "ddMonyyyy h:m:s", 0 ),
Formula( Random Uniform( Today() - In Days( 7 ), Today() ) )
),
);
dt << runFormulas;
Column(dt, "Group") << deleteFormula;
dt << Sort(By(:Group), Replace Table);
// Start Here . . .
gVals = Column(dt, "Group") << getValues; // Values in the 'grouping' column
dtVals = Column(dt, "DateTime") << getValues; // Values in the 'DateTime' column
dt << NewColumn("Is Latest?", Numeric, Nominal, ValueLabels({0 = "No", 1 = "Yes"}), Values(J(NRow(dt), 1, 0))); // New column
// Loop over the groups
for(g=1, g<=Max(gVals), g++,
// Find which row the maximum for the current group is in
dtVals2 = dtVals; // Copy all the values
dtVals2[Loc(gVals != g)] = .; // Set values not corresponding to the current group to missing
r = LocMax(dtVals2); // Get the position (row number) of the maximum of the values that are left
// Overwrite the existing "0" value for this row
Column(dt, "Is Latest?")[r] = 1;
);再:JSLクエリ:同じ列で同じ名前の行を検索し、そして日付を比較し、それ以降の日付を見つけるこれが表です。
| SN |
DATE1 |
LLR |
LLR 2 |
| ある |
7/29/2017 12:27 |
1 |
|
| b |
9/1/2017 9:24 |
1 |
|
| b |
9/1/2017 9:25 |
1 |
|
| c |
9/4/2017 19:46 |
1 |
|
| c |
8/31/2017 23:22 |
1 |
|
| c |
9/4/2017 19:27 |
1 |
|