JSLとの一致を計算する方法は?こんにちは、みんな!
Excelでは、「= offset(、match(,,)-1、match(,,)-1 ,,)」関数を使用して計算できますが、データが大きい場合は速度が遅くなります。
JSLでこれを行う方法は?ありがとうございます!
Re:JSLとの一致を計算する方法は?はい、Excelは10,000行以内のワークシート関数を使用するのに便利です。
10,000行以上はVBAディクショナリでこれを行うのに慣れていますが、100,000を超えるディクショナリは低速です。
現在、このJMPの方法を使用すると、1,000万行以上も高速になります。ありがとうございます。Re:JSLとの一致を計算する方法は?前回の返信での声明のJMPユーザーコミュニティへのメリットはわかりませんが、
「」また、Excelで辞書を使用するのも簡単です……Setd = CreateObject( "Scripting.Dictionary") 「」
そのようなコメントは、Excelディスカッションフォーラムでより適切であるように思われます
Re:JSLとの一致を計算する方法は?ご助力ありがとうございます。
また、Excelで辞書を使用するのも簡単です……Setd = CreateObject( "Scripting.Dictionary")
ただし、100万行を超える行は別の方法で実行する必要があります。Re:JSLとの一致を計算する方法は?可変数の列でスタックするいくつかの方法があります。今日Excelで一致を使用している場合は、最初の2つの方法のいずれかが機能する可能性があります。
//If the column positions do not change
d3_1 = d1 << Stack(
columns( Concat( [2 3], 4::10 )),
Source Label Column( "year" ),
Stacked Data Column( "data" ),
Drop all other columns( 1 ),
Keep( :state )
);
//If you want all columns
d1_clean = ( d1 << Subset( All rows, columns( 1::10 ) ) );
d3_2 = d1_clean << Stack(
columns( 2:: ncol(d1_clean) ),
Source Label Column( "year" ),
Stacked Data Column( "data" ),
Drop all other columns( 1 ),
Keep( :state )
);
//If the column names are in a specific format
// - get column names
cn = d1 << Get Column Names( string );
// - Find which columns match a format
// (jmp does have some patter matching tools but I like regex, check out regexr.com)
matches = repeat(0, N Items(cn));
for(c=1, c<= N Items(cn), c++, if(!is missing(Regex(cn[c], "^\d+$")), matches[c] = 1));
// - Stack
d3_3 = d1 << Stack(
columns( loc(matches) ),
Source Label Column( "year" ),
Stacked Data Column( "data" ),
Drop all other columns( 1 ),
Keep( :state )
);
Re:JSLとの一致を計算する方法は?これらの列が1000を超えるなど、多い場合は……日付としましょう。
これらの列は、変量ループの形式でd3テーブルセットアップをどのように実装しますか。ありがとうございます。

Re:JSLとの一致を計算する方法は?お疲れ様でした!ありがとうございます!Re:JSLとの一致を計算する方法は?大きなテーブルでは速度が心配なので、長い形式で「ルックアップテーブル」を作成し、値ごとに1つの行を作成してから、JoinまたはUpdateでルックアップを実行できます。これがどのように見えるかです:
Names default to here( 1 );
d1 = Open( "$SAMPLE_DATA/Presidential Elections.jmp" );
d2 = New Table( "offset",
Add Rows( 8 ),
New Column( "State",
Character,
"Nominal",
Set Values(
{"Wyoming", "Montana", "Montana", "Alaska", "Wisconsin", "Nebraska", "Nevada", "Montana"}
)
),
New Column( "year",
Character,
"Ordinal",
Set Values( {"1988", "1988", "1988", "1992", "2000", "1992", "2004", "1980"} )
),
New Column( "data",
Numeric,
"Continuous",
Format( "Fixed Dec", 12, 1 ))
);
//Move data to a long format
d3 = d1 << Stack(
columns(
:Name( "1980" ),
:Name( "1984" ),
:Name( "1988" ),
:Name( "1992" ),
:Name( "1996" ),
:Name( "2000" ),
:Name( "2004" ),
:Name( "2008" ),
:Name( "2012" )
),
Source Label Column( "year" ),
Stacked Data Column( "data" )
);
d3 << Set Name( "Long format" );
d3:year << Set Modeling Type("Ordinal");
//'Lookup' the values:
d2 << Update( with(d3), Match Columns( :state=:state, :year=:year ), Add Columns from Update table( None ));
d3 << Close window;
Re:JSLとの一致を計算する方法は?表「大統領選挙」のデータに基づいて、表「オフセット」の「データ」の値を計算します。
ありがとうございました!Re:JSLとの一致を計算する方法は?d1 = Open( "$ SAMPLE_DATA / Presidential Elections.jmp");
d2 = New Table( "offset"、
行を追加(8)、
New Column( "State"、
キャラクター、
「名目」、
値を設定(
{「ワイオミング」、「モンタナ」、「モンタナ」、「アラスカ」、「ウィスコンシン」、「ネブラスカ」、「ネバダ」、「モンタナ」}
)。
)、
新しい列( "年"、
キャラクター、
「名目」、
Set Values({"1988"、 "1988"、 "1988"、 "1992"、 "2000"、 "1992"、 "2004"、 "1980"})
)、
New Column( "data"、Character、 "Nominal"、)、
);