SAS传递中变量前面的“%”到底是什么意思?

时间:2012-03-06 15:22:51

标签: sql macros sas pass-through

传递中的“%”究竟是什么意思?我从其他人那里得到了这个代码,代码运行正常,但我只是不明白为什么要把%放在变量前面。如果是%宏,我在库中看不到任何宏代码。任何解释都会有所帮助

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;

1 个答案:

答案 0 :(得分: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

上述所有宏调用都将检索其相应的定义,并将其替换为您选择列的位置...