2016-11-07 8 views
1

私の目的はかなりシンプルです。データセットにいくつかの値を与えたいだけです。 2つのステップがあります。まず、値をマクロ変数に読み込みます。次に、マクロ変数をデータセットに渡します。コードは次のとおりです。マクロ変数を正しく読み取れません

まず、マクロ変数を作成します。

proc sql; 
select procdate, prim,side,orgnname,orgnid,OrgnStTe into :procdate, :prim, :side, :orgnname, :orgnid, :OrgnStTe from ours 
where objid=783125; 
quit; 

この手順はうまくいきます。その後、値を渡します。

data test; 
set m1; 
if id=184 then DO; 
objid=783125;procdate=&procdate.;prim=&prim.;side=&side.;orgnname=&orgnname.;orgnid=&orgnid.;OrgnStTe=&OrgnStTe.; 
END; 
run; 

この手順では、エラーは約orgnnameです。エラーについてはあまり確かではありません。 %bquote(& orgnname。)と%str(& orgnname)を試しました。両方とも機能しませんでした。

注:マクロ変数 "ORGNNAME"によって生成された行。 1カルバリジョンジェームスメモリアルホステック ---- ERROR 388-185:算術演算子が必要です。

ERROR 76-322:構文エラー。文は無視されます。

答えて

2

マクロ変数を展開するとき、結果のコードは有効なSAS構文である必要があります。あなたの場合、文字列リテラルを参照する場合は、値を引用符で囲む必要があります。

ORGNNAME = "&ORGNAME"; 

しかし、現実にはデータセットにすでに存在する値を転送するマクロ変数を使用しても意味がありません。だからあなたのマクロ変数と構文は次のようになりますことを行うには

ORGNNAME = "1 CALVARY JOHN JAMES MEMORIAL HOSPITAL"; 

。それはあまりにも多くの作業を必要とし、エラーや値切り捨てが発生しがちです。代わりにデータセットからデータを読み込むのはなぜですか?

data test; 
    set m1; 
    if id=184 then DO; 
    set ours (where=(objid=783125) keep=objid procdate prim side orgnname orgnid OrgnStTe); 
    end; 
run; 
関連する問題