2017-02-20 18 views
0

Ich habe viele Excel-Dateien mit unterschiedlichen Mengen von Spalten und Zeilen. Ich möchte sie in SAS importieren, aber ich möchte die erste Reihe, die erste Spalte und die zwei letzten Spalten von allen löschen.Importieren Excel-Datei mit bestimmten Bereich

Ich dachte, dies zu tun, indem Sie den "Bereich" -Befehl im Import-Schritt verwenden. Aber da muss ich einen bestimmten Bereich verwenden (zB B2: D5).

Irgendwelche Ideen?

Beste

+0

Sie die Zeichenfolge wahrscheinlich konstruieren beschreibt den Bereich Sie wollen und es dann verwenden! ;) – R3uK

+0

Ja, wenn Sie einen bestimmten Bereich möchten, müssen Sie ihn angeben. Ich bin mir nicht sicher, was deine Frage ist ... – Reeza

+0

Danke. Das Problem ist, dass ich einen bestimmten Bereich für jede einzelne Excel-Datei haben möchte. – QuantumMechanics

Antwort

0
proc import datafile='~/testxl.xlsx' out=test replace dbms=xlsx; 
    getnames=no; 
    range='MYRANGE'; 
    run; 

Etwas Ähnliches.

0

Wenn Sie verwenden, können Sie mit der optionalen Anweisung einschränken, welcher Teil der Datei gelesen wird. Aber Sie müssen den Bereich im Format "Blattname $ start: end" angeben, daher müssen Sie den Namen des Blattes in der XLSX-Datei kennen, die Sie lesen möchten.

Sie können die XLSX-Libname-Engine verwenden, um die Namen der Blätter in der XLSX-Datei abzurufen.

libname in xlsx "&filename" ; 
proc contents data=in._all_ noprint out=contents; run; 

Dadurch können Sie auch wissen, wie viele Spalten es gibt.

proc sql noprint ; 
    select memname,max(varnum) into :sheetname trimmed,:ncols trimmed 
    from contents group by 1 ; 
quit; 

Um herauszufinden, wie viele Zeilen vorhanden sind, müssen Sie die Daten lesen.

data _null_; 
    if eof then call symputx('nrows',_n_); 
    set in.&sheetname end=eof; 
run; 

Mit diesen Informationen könnten Sie dann die Option RANGE = für Sie PROC IMPORT erstellen.

Hinweis dass Sie die Anzahl der Spalten in die XLSX-Spaltennotation (A, ..., Z, AA, ..., AZ) umwandeln müssen. Wenn Ihr Blatt also 26 Spalten hat, dann ist die letzte Spalte die Spalte Z und die letzten zwei würden Sie durch die Spalte X lesen.

Nehmen wir an, Sie haben %eval(&ncols-2) in die entsprechende Spaltenbeschriftung übersetzt und das Ergebnis im Makro gespeichert Variable LASTCOL.

So Ihre endgültige PROC IMPORT wird jetzt:

proc import dbms=xlsx datafile='&filename" replace out=want ; 
    range="&sheetname$b2:&lastcol.%eval(&nrows-1)" ; 
run; 
+0

Vielen Dank. Das klingt gut! Ich werde das versuchen :-). – QuantumMechanics

Verwandte Themen