2013-01-22 79 views
5

是否可以在數據步驟的keep中使用通配符?我想做以下(B型保持變量x和y的所有變量左連接A的開始用):通配符保留在數據步驟

data C; 
    merge A(in=a) 
      B(keep= x y var* in=b); 
    by x y; 
    if a; 
run; 

回答

8

是,使用:

data C; 
    merge A(in=a) 
      B(keep=x y a: in=b); 
    by x y; 
    if a; 
run; 

(這不是一個好主意,說in=a,如果你有一個名爲a變量)。

如果你有一個序列號變量,如a1a2,...,aN,你可以寫a1-aN。如果您想要一組相鄰列(例如varXvarYvarZ物理上與數據集相鄰),則可以使用varX--varZ。這兩個例子之間的區別只是你是否使用一個或兩個短劃線。

+0

您好,非常感謝您的快速回復和澄清! – statquant

+0

順便說一句,我可以使用正則表達式或類似的選擇列名? – statquant

+0

不是直接。你可以通過一個單獨的步驟;例如,您有dictionary.columns,它是包含當前會話中所有列名和表名的表。您可以在SQL中針對它運行查詢,或者使用SAS等效的sashelp.vcolumn,針對它運行SAS datasteps。然後將結果存儲在宏變量中,並在實際保留步驟中使用該宏變量。 – Joe