2013-01-22 47 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