2012-03-06 34 views
1

传递中的“%”究竟意味着什么?我从别人那里得到了这段代码,代码工作正常,但我不明白为什么必须把%放在变量前面。如果它是%宏,我在库中看不到任何宏代码。任何解释都会有帮助SAS传递变量前面的“%”是什么意思?

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; 
+0

您连接的是哪种类型的DBMS? – stevepastelan 2012-03-06 16:44:32

+0

此外,如果你想仔细检查它是否是一个宏调用,也许尝试像'%put%application_id;'看看是否写入日志 – stevepastelan 2012-03-06 16:50:14

+0

最后,你可以检查是否有其他的宏正在通过autocall facility:'%put%sysfunc(getoption(sasautos));' – stevepastelan 2012-03-06 16:52:39

回答

1

%MACRO X; VAR %MEND;

上面的例子是一个宏的定义。

在你的问题,所有%列实际上是做的宏调用,并与目前在他们的乌尔选择查询宏观definitions.For例如值替换的呼叫......

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 

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

+0

谢谢,我在想这样做应该有更好的方式吗? – JPC 2012-03-07 17:29:46