sasマクロを作成しています。どちらの列にでも結合しようとしています。それは望んでいるので、これは、エラーが出て、それのように私は何かを与えるときには、両方の列が存在します2つの列のいずれかに条件付きで結合する必要があります(どちらかが存在する場合)
%Macro Base_pop(ssc,input_table,POPN_TBL);
PROC SQL;
CREATE TABLE test_&ssc. AS
SELECT B.ACCOUNT_ID
FROM ADL_EXT.&input_table.TB INNER JOIN
ADL_BSE.BRDM_POP_FLG_&POPN_TBL.B
ON B.ACCOUNT_ID = (CASE WHEN %sysfunc(exist(TB.ACCOUNT_ID)) then TB.ACCOUNT_ID
ELSE TB.FAC_ID
END)
WHERE B.FLG = 'Y'
ORDER BY B.ACCOUNT_ID ;
QUIT;
%MEND;
コードエラーを出しTB.Account_idが存在しないと言って。私も合体を試みたが、うまくいかなかった。
マクロに渡されるテーブルには、2つの列のうち1つだけが存在します。 したがって、現在のテーブルに存在する列を動的に結合する必要があります。
お願いします!
1)EXIST()関数は変数ではなく、データセットの存在をテストしています。 (2)マクロを作成したので、%IFロジックを使用して、実行したいSASコードを条件付きで生成することができます。そうすれば、存在しない変数への参照を生成することはできません。あなたの例には、条件付きで生成されたコードはありません。私はCASE文を%IF ..%THEN%ELSE文に置き換えたいと思う。 – Tom
マクロを呼び出すプログラマーに、マクロにどの変数名を使用させるように指示することはできませんか? – Tom
お返事ありがとうTom!マクロは大きく、いくつかのテーブルに存在する可能性のあるさまざまなカラムを使用します。条件付き%if論理が偽の場合でも、コンパイラはなぜ偽条件に従う変数名を探すのですか?この1つの列だけではなく、いくつかのそのような列があり、パラメータの追加を続けたくない場合は、回避策はありません。 – Rhea