1

パススルーの「%」とは正確には何を意味しますか? このコードは他の人から入手しました。コードは正常に動作しますが、変数の前に % を配置する必要がある理由がわかりません。%macro の場合、ライブラリにマクロ コードがありません。どんな説明でも役に立ちます

proc sql;
  connect to odbc as d(datasrc=source);
  create table out as select * from connection to d
  (
    select
      t.id,t.rule_id,
      %application_id,
      t.date,
      %dpv, %dpvfn1, %dpvfn2, %dpvfn3,
      %AddressValid,%AddressValidMsg,%AddressType,    
      from &db2 t
      join &db3 dxs on t.id=dxs.id
 left join &db4 dxr on t.id=dxr.id
  );
  disconnect from d;
quit;
4

1 に答える 1

1

%MACRO X; VAR %MEND;

上記の例は、マクロの定義です。

あなたの質問では、%を含むすべての列が実際にマクロ呼び出しを行っており、その呼び出しをマクロ定義に存在する値に置き換えています。たとえば、選択クエリでは...

select
      t.id,t.rule_id,
      %application_id,
      t.date,
      %dpv, %dpvfn1, %dpvfn2, %dpvfn3,
      %AddressValid,%AddressValidMsg,%AddressType,    
      from &db2 t
      join &db3 dxs on t.id=dxs.id
 left join &db4 dxr on t.id=dxr.id

%application_id,%dpv, %dpvfn1, %dpvfn2, %dpvfn3,%AddressValid,%AddressValidMsg,%AddressType

上記のマクロ呼び出しはすべて、対応する定義を取得し、選択した列の代わりに置き換えます...

于 2012-03-07T00:22:33.553 に答える