2016-11-23 11 views
0

データセットでの要約操作を実行するためのマクロを作成しようとしています。SASで条件付きで連結されました

このマクロは、いくつかの変数を取り込む:

  • 下限日付(= '01Jan2013'd開始)
  • 上限日付(端= '01Jan2016'd
  • 追加 'と' 条件(時々''、時々'and state = XXX'

これらの変数は、以下のマクロのwhereステートメントに入力されます。時には 'と'の条件があり、時にはまったくまったくないことに注意してください。

%macro program1(start,end,cond); %macro _(); %mend _; 
    proc summary data = data1 nway missing; 
     where &start. < month < &end. || &cond.; 
     class month_inc; 
     var var1 var2; 
     output out =summ_data1 sum=; 
    run; 
%mend; 

マクロ変数がwhereステートメントで正しく機能するようになっています。 ||は機能しません。

私はそうのようなCATXを使用しようとしました:

where catx(' ',&start. le month_inc le &end.,&cond.); 

そして、その分動作します。 &start.&end.変数は、SASの日付ではなく数値として解決されるため、結果が正しく集計されません。

答えて

1

パラメータCOND(cond=and state='XXX')の値の一部として文字通りキーワードANDを渡す場合は、連結演算子をWHERE文から削除するだけです。それ以外の場合は、オプションのCOND値を参照する部分を条件付きで生成するためにマクロロジックを使用してください。

where andとも呼ばれます)ステートメントを使用して、既存のWHEREステートメントを強化するのが好きです。

%macro program1(start,end,cond); 
    proc summary data = data1 nway missing; 
    where &start. < month < &end. ; 
%if %length(&cond) %then %do; 
    where also &cond.; 
%end; 
    class month_inc; 
    var var1 var2; 
    output out =summ_data1 sum=; 
    run; 
%mend; 

それではあなたの例の呼び出しは次のようになります。

%program1(start = '01Jan2013'd 
     ,end = '01Jan2016'd 
     ,cond = state = 'XXX') 
+0

をおかげで、トム、あなたの構文の作品が、日付が正しく動作していません。 2013年までの日付範囲のデータ行がまだ取得されています – Wolfspirit

+0

このタイプの問題については、問題を説明するためのサンプルデータを提供する必要があります。データと予想される結果を入力します。 – Tom

+0

それは問題ない、解決されました。ありがとう@トム:) – Wolfspirit