1

PROC SQL と既存のマクロ変数の値を使用して、SAS データ セットに行を挿入しようとしていますが、標準の構文エラー メッセージが表示されます。失敗するコードの例を次に示します。

%let viewname=MKTVIEWS.imei_ref;
%let xrc=0;
%let xmsg= ;

proc sql;
   create table results (viewname char(40), xrc numeric, xmsg char(200));
   insert into results (viewname, xrc, xmsg)
   values ( %str(%')&viewname%str(%') 
          , &xrc 
          , %str(%')%superq(xmsg)%str(%') );
quit;

エラーメッセージは次のとおりです。

ERROR 22-322: Syntax error, expecting one of the following: a quoted string, 
a numeric constant, a datetime constant, a missing value, +, -, MISSING, NULL,
USER.

2 つの文字マクロ変数なしでプログラムを実行すると、問題なく動作します。

proc sql;
   create table results (viewname char(40), xrc numeric, xmsg char(200));
   insert into results (viewname, xrc, xmsg)
   values ( 'MKTVIEWS.imei_ref'
          , &xrc 
          , '' );
quit;

明らかに、マクロの引用などについて何かが欠けています。これらの呼び出しを埋め込んで引用符で囲まれた文字列を作成するのではなく、一時的なマクロ変数を使用してみ%STRましたが、それもうまくいきませんでした。

4

3 に答える 3

3

多分私は何かが欠けているかもしれません"&viewname"が、仕事をしませんか?

于 2013-06-26T19:42:44.563 に答える
1

私は datastep クォーティング関数を使用するのが最も簡単だと思います。これは主に、実際のマクロのクォーティングが苦手なためです。

%let viewname=MKTVIEWS.imei_ref;
%let xrc=0;
%let xmsg= ;


options symbolgen mprint;
proc sql;
   create table results (viewname char(40), xrc numeric, xmsg char(200));
   insert into results (viewname, xrc, xmsg)
   values ( %sysfunc(quote(&viewname))
          , &xrc 
          , %sysfunc(quote(%superq(xmsg))) );
quit;

それはあなたが望んでいることを達成していますか?

于 2013-06-26T19:34:24.273 に答える
1

ボブ、うまくいくからうまくいかない。%STR マスクされた引用符は、マクロ コンパイラ (予想どおり) だけでなく、一般的なプログラム コンパイラからも引用されます。したがって、SQL では、引用符のない文字変数に値を指定しました。

ここで違いを参照してください。次のもの以外のマクロはありません%str

data text;
length text $50;
text=%str(%')bla bla text%str(%');
run;

data text;
length text $50;
text="%str(%')bla bla text%str(%')";
run;

テーブルに引用符で囲まれた文字列が必要な場合:

proc sql;
   create table results (viewname char(40), xrc numeric, xmsg char(200));
   insert into results (viewname, xrc, xmsg)
   values ( "%str(%')&viewname%str(%')"
          , &xrc 
          , "%str(%')%superq(xmsg)%str(%')" );
quit;

もちろん、すでに述べたように、マクロの引用が得意な人はいません :-)

于 2013-06-27T21:25:51.590 に答える