2017-02-02 9 views
0

必要がdatastep外マクロ変数の評価を行い、変数の存在に応じて、挿入を実行することです:入力値

data my_dataSet; 
set ... 
.... 
if %SYMEXIST(Variable_from_prior_code) = 1 then do; 

    dataset_variable = &Variable_from_prior_code.; 

    end; 
else do; 

    dataset_variable = &Some_default_value_from_prior_code; 

end; 

しかし、これは、コンパイラで失敗"見かけ上のシンボリックリファレンス& Variable_from_prior_code"として実行しようとしています。解決されていません。つまり条件が満たされない場合でも、コンパイラはif文の内容をチェックします。

私は愚かな回避策を思い付いた:「

if %SYMEXIST(Variable_from_prior_code) = 0 then do; 

    dataset_variable = &Some_default_value_from_prior_code 

    %let Variable_from_prior_code=0; /*Dummy value*/ 

    end; 
else do; 

    dataset_variable = &Variable_from_prior_code.; 

end; 

コンテンツを評価するから、コンパイラを制限する方法、それはshouldn:反対directonからこれにアプローチするのではなく、アナグマのバッグよりも愚かな感じ条件のために? 代わりに、変数の作成を必要としない、より洗練された回避策がありますか?

+1

マクロロジック(コードの生成に使用)とデータステップロジックが混在しています。コードをマクロにラップすると、%IFを使用して条件付きでコードを生成できます。 – Tom

答えて

1

私は必要とされない限り、マクロロジックを避けたいと思います。

現在、マクロとデータステップロジックが混在しています。マクロはデータステップコード(本質的にプログラムジェネレータ)を書き込むために使用され、結果として得られるデータステップコードは、マクロステートメントがコンパイル/解決/実行された後に長く実行されます。

+0

symgetがトリックをしました。テストされ、動作することが確認されました。 合意。マクロロジックが悪いジュジュです。しかし、それはそのままです。 :((2つのレガシーワークフローを統合し、選択した少数のファイルのみを編集する権限) – pinegulf