2013-01-22 11 views
5

ist es möglich, Platzhalter in keep eines Datenschritts zu verwenden? Ich möchte folgende (beginnend links Join von A auf B zu halten Variablen x und y und alle Variablen mit a) tun:Wildcards in Keep in einem Datenschritt

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

Antwort

8

Ja, : verwenden.

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

(Es ist keine gute Idee, in=a zu sagen, wenn Sie eine Variable a genannt haben.)

Wenn Sie Variablen mit fortlaufenden Nummern haben, wie a1, a2, ..., aN, können Sie schreibe a1-aN. Und wenn Sie einen Satz benachbarter Spalten haben möchten (z. B. varX, varY und varZ sind physisch benachbart im Datensatz), können Sie varX--varZ sagen. Der Unterschied zwischen diesen beiden Beispielen besteht nur darin, ob Sie einen Strich oder zwei verwenden.

+0

Hallo itzy, danke für die schnelle Antwort und Klärung! – statquant

+0

BTW, kann ich Regexp oder ähnliches verwenden, um Spaltennamen auszuwählen? – statquant

+0

Nicht direkt. Sie können durch einen separaten Schritt; Sie haben beispielsweise dictionary.columns, die die Tabelle mit allen Spaltennamen und Tabellennamen in der aktuellen Sitzung enthält. Sie können Abfragen in SQL dagegen ausführen oder die SAS-Entsprechung sashelp.vcolumn verwenden und dafür SAS-Datasteps ausführen. Speichern Sie dann die Ergebnisse in einer Makrovariablen und verwenden Sie diese Makrovariable in einem tatsächlichen Keep-Schritt. – Joe