私は SAS を初めて使用し、最近 SAS データセットの一部を SQL Server テーブルに移行しましたが、分析にはまだ SAS を使用しています。SAS が SQL Server テーブルからデータを取り込もうとしていて、srv_edt の日付が dos_beg_dt1 と dos_end_dt1 の SAS 日付の間にあるかどうかを SAS にチェックさせようとすると、問題が発生しました。
SAS が日付を比較しようとすると、次のエラーが表示されます: エラー: WHERE 句の演算子には互換性のある変数が必要です。
dos_beg_dt1、dos_end_dt1、および srv_edt (SQL 日付形式) はすべて、yyyy-mm-dd の形式で「表示」されます。srv_edt を SAS テーブルに取り込むと、文字の日付として読み取られます。だから私は日付の形式を変更しようとしましたが、次のようなエラーが表示されます: エラー: 変数 srv_edt は文字と数値の両方として定義されています。srv_edt (SQL) が dos_beg_dt1 と dos_end_dt1 の SAS 日付の間にあるかどうかを確認するために SAS に比較を行わせるための正しい形式または関数が見つからないようです。
私が使用するコードは次のとおりです。
libname sql odbc dsn=test schema=dbo;
%let dos_beg_dt1 = %sysfunc(intnx(qtr,&date,-1,beginning),yymmdd10.);
%let dos_end_dt1 = %sysfunc(intnx(qtr,&date,-1,end),yymmdd10.);
data sample;
set sql.table;
where &dos_beg_dt1 <= srv_edt <= &dos_end_dt1;
run;
参考までに、SAS 9.2 を使用して odbc 経由で SQL Server 2008 に接続しています。
ヘルプやアドバイスをいただければ幸いです。