2016-08-04 1 views
1

SASプログラミングの初心者です。 私は物事を理解するためのコードを書いていますが、私はcontinue文を取得した後になぜ出力に行くのかを知ることはできません。下記の はコードです:SET文のバックエンド処理とSASでの継続および終了ステートメントの使用

data a B; 
put 'entering do DATASTEP' ; 
do i=1 to 4; 
    put 'entering do loop'" " i; 
if (i=1) then do; 
    put 'value of i is 1'" " i; 

    put 'Entering the loop' ; 
    put j=_N_; 
    if _N_ = 2 then continue; 
    set sashelp.class(firstobs=1 obs=5); 
    put 'Ouside the loop'; 
    output a; 
    end; 
if (i=2) then do; 
    put 'value of i is 2'" " i; 

    put 'Entering the loop' ; 
    put j=_n_; 
    set sashelp.class(firstobs=6 obs=10); 
    put 'Ouside the loop'; 
    output B; 
    end; 
end; 
put 'GETING OUT OF THE DATASTEP'; 
run; 

これを実行してくださいするために私の疑問要求の詳細明確にするために、その後、我々は、出力データセットとログについての議論を持つことができます。

ありがとうございます。

+0

わかりにくいコードをどのように書きましたか?何をしようとしていますか? – Cristina

+0

レスポンスありがとうクリスティーナありがとう。私はこのコードから何らかの要件を達成しようとしていません。私は、出力が両方のデータセットにどのように生成されているのか、そしてContinue Statementがその仕様に従って動作していない理由を理解しようとしています。私によれば、データセットAでは、_N_ = 2のためにContinue Statementを使用しているので、4つのレコードしかないはずですが、その中に5つのレコードがあります。続行声明が出力Aの前にあるので、2番目のレコードはデータセットAに入るべきではありません。問題がある場合は教えてください。 –

+0

ああ、大丈夫!説明をお寄せいただきありがとうございます。あなたのポストにこの情報を追加して、理解しやすくすることもできます。 – Cristina

答えて

2

CONTINUEはうまく動作しているようです。

通常、入力データの最後を読み取ると、SASはデータステップを停止します。 CONTINUEステートメントがなければ、最初のSETステートメントから6回目の読み込みを試みたときです。しかし、それを一度スキップしたので、6回目の2回目のSET文を実行しようとすると停止します。

ここでは、データステップの処理を簡略化して示しています。それが1,6,7,2,8,3,9,4,10,5の順番でどのようにレコードを読み取るかに注目してください。

data sample; 
    do i=1 to 10; output; end; 
run; 

data _null_ ; 
    if _n_^=2 then do; 
    set sample (firstobs=1 obs=5); 
    put i=; 
    end; 
    set sample (firstobs=6 obs=10); 
    put i=; 
run; 

i=1 
i=6 
i=7 
i=2 
i=8 
i=3 
i=9 
i=4 
i=10 
i=5 
関連する問題