これは、進行状況を反映した編集です。
私は動作する次の機能を持っています:
proc fcmp outlib=mydir;
function sqlWhere(interval $, myDate $) $;
...
return("id");
endsub;
quit;
これはテスト済みで、正常に動作します。だから私は試しました:
%macro sqlWhere(interval, myDate);
&interval.("year") AS t
&myDate.("someDateField") AS tt
%mend;
proc sql;
CREATE TABLE test AS (
SELECT %sqlWhere(t, tt)
FROM myTable);
quit;
選択を実行すると、上部が正常に実行されます。ただし、proc sql が異常終了し、コンマが足りないと表示されます。コードが機能するはずの他のテストで関数が「 id 」を返すため、私は混乱しています。エラーは、「tt」部分にカンマが欠落していることを示しています...
SAS で動的クエリを作成しようとしています。いくつかの問題があり、やりたいことが可能かどうかわかりません。また、以前の質問を削除して申し訳ありません。もっといい説明が欲しかった。
このコードがあるとします:
proc sql;
SELECT
YEAR(myDate) AS yr,
MONTH(myDate) AS mo,
id
FROM
myTable;
run;
私はそれを条件付きにしようとしています。これにより、2 つの問題が生じます。まず、基本的な構文を機能させることができません。次に、カスタム関数で適切な文字列を作成できません。
私はこのようなものが欲しい:
%let a = sqlDate("month");
proc sql;
SELECT
&a
FROM
myTable;
run;
この構造は、関数を忘れて入力しても機能しません
%let a = "YEAR(myDate) AS yr, MONTH(myMonth) AS mo, id";
このようなことは可能ですか?
私の2番目の問題は、関数自体を構築する方法ですが、最初にこのようなことさえできることを確認したいと思います. 私は基本的に、「日」、「週」、「月」、または「年」のいずれかであるマスタープログラムにインジケーターを配置し、プログラムに特定の方法でSQLを照会するように指示しています。何とか文字列全体を渡すことはできますか? この方法で入力に基づいて文字列を作成することは可能ですか?