2017-05-24 5 views
0

基本的なデータステップでは、新しい変数を作成しています。この新しい変数に基づいてデータセットをフィルタリングする必要があります。新しく計算された変数のデータステップをフィルタリングすることは可能ですか?

data want; 
    set have; 

    newVariable = 'aaa'; 
    *lots of computations that change newVariable ; 
    *if xxx then newVariable = 'bbb'; 
    *if yyy AND not zzz then newVariable = 'ccc'; 
    *etc.; 

    where newVariable ne 'aaa'; 
run; 

ERROR: Variable newVariable is not on file WORK.have.

私は通常2つの段階でこれを行うが、良い方法がある場合、私は思ったんだけど。

(もちろん、あなたは常にWORK.haveに存在する変数に基づいて、複雑なwhere statementを書くことができます。しかし、この場合にnewVariableの計算は、それはあまりにも複雑だし、第二data stepでフィルタを行うには、より効率的である)

私はこれについての情報を見つけることができませんでした、私は答えがドキュメントにあると私はそれを見つけることができなかったばかな質問についてお詫び申し上げます。必要に応じて質問を削除します。

ありがとうございます!一般的に

if newVariable ne 'aaa'; 

if <condition>;if not(<condition>) then delete;と同等です:

答えて

1

はサブセットifステートメントを使用します。 deleteステートメントは、SASにデータステップのこの反復を放棄し、次の反復の開始に戻るよう指示します。サブセットifステートメントの前に明示的なoutputステートメントを使用していない限り、行が出力されません。

+0

シンプルで機能的です。ありがとう! –

+0

WHEREが失敗したときにこれがなぜ機能するのか注目する価値があります。 'WHERE'節はコンパイル時に見られ、入力レコードのストリームに適用されます。 IFはコンパイルされたステートメントであり、コードと共にインラインで適用されます。 – DomPazz

関連する問題