SAS から JSL へ - ループを実行...私は長い間 SAS ユーザーであり、JSL を学ぶことを余儀なくされています...
SAS では簡単だと思っていたことが、JSL ではとても難しいようです...
JSL を使用して次の入れ子になった Do ループ テーブルを生成する JSL コードを共有して、JSL で Do ループがどのように機能するかを誰かが教えてくれませんか。
data frustration;
do temp = 1 to 10 by 1;
do press = 5 to 20 by 5;
do time = 1 to 1000 by 20;
output;
end;
end;
end;
run;
この種のシミュレーションを作成するのは非常に簡単なはずですが、これが理解できないようです。
スクリプト作成Re: SAS から JSL - Do ループ...ジェフ - 遅くなって本当にごめんなさい。 この返信では、以上のことをしていただき、感謝しています。 もう一度確認しなかった理由は、希望どおりに動作させることができたからです。 JSL と SAS の違いについて説明していただき、ありがとうございました。 本当に役に立ちました
Re: SAS から JSL - Do ループ...やあ@fat_angus JMP ユーザー、および JMP ユーザー コミュニティへようこそ。
長年 SAS プログラマーとして働いている人 (私自身もプログラマーです) として、JMP と JSL については、SAS についての考え方とはまったく異なる考え方をする必要があります。
たとえば、SAS DATA ステップに関する質問を投稿したとします。 ご存知のとおり、DATA ステップでは SAS データ セットを作成することがすべてです。 JSL は主に、JMP で対話的に行うことを自動化することを目的としているため、JSL の DATA ステップに直接相当するものはありません。
そのため、私は常に、どのタスクを自動化したいかを考え始める前に、JMP を対話的に使用するための十分な基礎があることを確認することをお勧めします。
たとえば、DATA ステップで作成するデータ テーブルを作成するには、[ファイル] -> [新しいテーブル] を作成します。
それから列 -> 新しい列...新しい列を追加して与える式を使用して順序()関数。

Temp columnTemp column温度列
他の列にも同じことを行います。
press columnpress columnプレスコラム
time columntime column時間列
データテーブルに行を追加すると、次のようになります。

準備ができたら、データ テーブルの名前の横にある赤い三角形と [テーブル スクリプトのコピー] に移動します。

これにより、新しいテーブルを作成するための次のスクリプトが提供されます。
New Table( "untitled",
Add Rows( 2000 ),
New Column( "temp",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Sequence( 1, 10, 1, 200 ) )
),
New Column( "press",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Sequence( 5, 20, 5, 50 ) )
),
New Column( "time",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Sequence( 1, 1000, 20 ) ),
)
)
もちろん、DATA ステップで説明したテーブルを取得する対話型の方法は他にもあります。 シーケンスを使用して 3 つのテーブルを作成し、次を使用できます。テーブル -> 結合そしていくつかのデカルト結合同じテーブルを取得します。 準備が完了すると、JMP は途中のステップのスクリプトを提供します。
いずれにしても、JMP のスクリプト作成について考える前に、JMP、特にデータ テーブルを対話的に使用する方法を理解することから始まります。 結局のところ、JMP が組み込みツールで何ができるかを理解するまでは、スクリプトに何が必要かわかりません。
学習を続け、コミュニティで質問を続けてください。 喜んでお手伝いさせていただきます!
Re: SAS から JSL - Do ループ...素晴らしいクレイジ・ヘイルズです!
時間を割いて説明していただき、大変感謝しております。
Re: SAS から JSL - Do ループ...スーパーユーザー PMROZ に改めて感謝します。これは役に立ちます。
Re: SAS から JSL - Do ループ...新しい言語を使い始めることがいかに難しいかを理解する完全な例です。 (ヘルプ -> スクリプト索引とオンライン ヘルプは補完的なリソースです。 私は主に、ヘルプ -> スクリプト インデックスを使用して、その仕組みを思い出させます。 最初はオンライン ヘルプの方が良いかもしれません。) ここには必要なものよりも少しだけ多くの情報を記載しました。 名前の大文字と小文字に関するSASルールを忘れてしまいました...
Names Default To Here( 1 );
// what does that mean? JSL has several namespaces; the 'here' namespace is for this
// editor window and means 'press' is really 'here:press' but 'dtFrustration:press' belongs to
// the table's namespace (of column names.) You could also just use different names,
// like 'iPress' for the loop control variable. JMP's variable names are almost never
// case sensitive, the weird exception being column names, which are only sensitive <BR />// if both 'Age' and 'age' are columns...Don't do that!
// an easy way to get this table script is to make a new table with the
// JMP GUI, then use the top-left red triangle to 'Copy Table Script (No Data)'.
// By convention, JSL uses 'dt' in the variable name that holds a handle to a table.
dtFrustration = New Table( "frustration",
New Column( "temp" ), // continuous numeric by default
New Column( "press" ),
New Column( "time" )
);
// because the table might be linked to other reports, there
// is a lot of hidden messaging when the table changes. A lot.
// The messaging can be shut off and later enabled for a nice speedup.
// (to see it take longer, rerun just the loop below.)
// dtFrustration << BeginDataUpdate; // pair with EndDataUpdate, below
For( temp = 1, temp <= 10, temp++,
For( press = 5, press <= 20, press += 5,
For( time = 1, time <= 1000, time += 20,
dtFrustration << addrows( 1 );
dtFrustration:time = time;
dtFrustration:temp = temp;
dtFrustration:press = press;
)
)
);
// dtFrustration << EndDataUpdate;
Re: SAS から JSL - Do ループ...例から学ぶほうが簡単だと思うので、このフォーラムで見つけられる限り多くのコードを見てください。一度使い始めると、スクリプトインデックスはまさにあなたの味方になります。
JSLためにループともしもこのステートメントは、概念としては単純ですが、最初は私にとって少し当惑しました。についての学習曲線を短縮するにはもしも、これは関数であり、カンマは次のことを表すことに注意してください。それから、そうでなければとそれ以外。スクリプトウィンドウを開きます( Ctrl+T )、ウィンドウ内で右クリックして選択します埋め込みログを表示。以下のコードを貼り付けてクリックしますCtrl+Rそれを実行します。a、b、c のさまざまな値を試して、何が起こるかを確認してください。
a = 1;
b = 2;
c = 1;
if (a == b,
// then
print("a is equal to b");
,
// else if
a == c,
// then
print("a is equal to c");
,
// else
print("No match found for a");
);
Re: SAS から JSL - Do ループ...ありがとう...これは役に立ちます。
Re: SAS から JSL - Do ループ...あなたの言っていることは聞こえます...ありがとう...でも、それは誰かがキリスト教を理解するために聖書を読めと言っているようなものです....これを行う方法を探してスクリプトガイドを約2時間費やしました簡単なコンセプト...さらに、他のスクリプトの作成でも多くの成功を収めてきました...しかし正直に言うと、スクリプトガイドを読むと、SAS ライセンスの予算にさらに 20,000 が必要になります。
私は筋金入りのプログラマーではありません... 私はただ物事を早く終わらせようとしているエンジニアです。
Re: SAS から JSL - Do ループ...助けてくれてありがとう
Re: SAS から JSL - Do ループ...C++ プログラマー向け JSL ガイドも役立つかもしれません。 これは、JSL の for ステートメントが実際には関数であることを示そうとしており、それを理解すると、構文を正しく理解することがはるかに簡単になります。
Re: SAS から JSL - Do ループ...これらすべてについては、スクリプト ガイドで説明されています。ぜひ読んでください。これは、JMP の [ヘルプ] プルダウン メニューから利用できる JMP ドキュメント ライブラリから入手できます。
Re: SAS から JSL - Do ループ...JSL の学習を支援するのに最適な場所に来ました。スクリプトインデックスは、オンラインドキュメントと同様にあなたの友人です。
ここにあなたが望むことを行うコードスニペットがあります:
dt = data table("frustration");
for (temp = 1, temp <= 10, temp++,
for (press = 5, press <= 20, press+=5,
for (time = 1, time <= 1000, time+=20,
show(temp, press, time); // output
);
);
);