2012-03-06 33 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