2016-05-09 4 views
0

私はデータセットとproc SQLを持つプログラムがあります。 プログラムの最後に私は最終的な価値をチェックし、プログラムの一部を別のパラメータで再実行するか、値が大丈夫かどうかを判断したいと思います。いくつかのデータセットとproc sql

ループデータセットとprocsqlを行う方法はありますか? (例えば、私は以下のすべてのコードを繰り返します。)任意の助け

proc sql; 
    create table first as 
    select * from qw; 
quit; 

data st; 
    a = 1 
run; 

proc sql; 
    create table st as 
    select * from fir; 
quit; 

感謝します。 Michal

+0

データステップ/ proc sqlsに入力するパラメータを追加できるマクロが必要なようです。あなたはこのアプローチを検討しましたか?どのパラメータを変更するべきかは言わないので、完全な答えを提供するのは難しいです。マクロを使ったオンラインヘルプがたくさんあるので、最初に手を加えて、もう一度やり直したら質問を修正してください。 – Longfish

+0

私が理解していれば、データステップ/ proc sqlをマクロに書き直して、 ? – mical

+0

マクロに特定の値/しきい値に達するまでループを追加することができます。 – Reeza

答えて

0

do-whileループを使用してマクロを作成する必要があります。あなたは値が何であるか、どこから取得しているのか、停止したいのかを指定していませんが、このアイデアはあなたを始めるのに十分です。

最小化または最適化の問題を見て、SAS/IMLまたはSAS/ORを使用している場合は、状況に役立つプロックがあるかどうかを確認したい場合があります。

%macro loop (threshold); 
%do %while (&value < &threshold); 
proc sql; 
    create table first as 
    select * from qw; 
quit; 

data st; 
    a = 1 
run; 

proc sql; 
    create table st as 
    select soucet +1 into :value from fir; 
quit; 


%end; 

%mend; 

編集:

使用終了=セットステートメントのオプション。その最後のレコードがループするために使用できるマクロ変数を作成している場合。

Set end=eof; 
if eof then do; 
    call symputx('soucet', soucet); 
end; 
+0

私が持っているコードは大きくなりますが、基本的な考え方は以下のようなテーブルがあり、soucetが<0なら+1をプラスしてもう一度やりたいと思います。今私はtable2 '%マクロテーブルからsoucetの最終価値を得る方法を知らない。 \t data table1; \t \t do i = 1~10; \t \t \tプラス= 1; \t \t \tマイナス= 5; \t \t \t出力; \t \t end; \t実行; \t data table2; \t \t set table1; \t \tスセット(0)を保持します。 \t \t soucet = soucet + plus - minus; \t \t出力; \t実行; %mend; ' – mical

+0

set文でend =オプションを使用します。その最後のレコードがループするために使用できるマクロ変数を作成している場合。セット終了= eof; eofがそうするならば。 symputx( 'soucet'、soucet)を呼び出します。終わり; – Reeza

+0

ありがとう、それは動作します! – mical

関連する問題