Hallo,
nur noch als Ergänzung:
Im Beispiel handelt es sich um eine Rohdaten-Datei, in der die unterschiedlichen Werte nicht durch ein Trennzeichen getrennt sind, sondern immer an dedizierten Spalten beginnen. In diesem Fall ist man ganz 'sauber', wenn man spaltenorientiert einliest, d.h., wenn man bei jedem Wert, den man auslesen will, angibt, an welcher Spalte er beginnt und wo er endet.
Der Programmcode sähe dann so aus:
data test;
infile datei03 obs=999999999 LRECL=555 missover pad end=end ;
length
kundnum $10
anldat_a $8
loevm_A $1
sperr $1
anrede $15
name1
name2 $40
strasse $40
plz $5
ort $40
;
input
kundnum $ 1 - 10
anldat_A $ 11 - 18
loevm_A $ 19 - 19
sperr $ 20 - 20
anrede $ 21 - 26
name1 $ 27 - 41
name2 $ 42 - 56
strasse $ 57 - 74
plz $ 75 - 80
ort $ /* Den Rest der Zeile als 'Ort' lesen */
;
output;
run;
proc print data=test;
run;
Abschließende Hinweise:
Das Length-Statement wird nur benötigt, wenn man in der Zieltabelle andere Variablen-Längen definieren will, als sie in der Rohdatendatei vorgesehen sind
Wenn man z.B. das Length-Statement für name2 weglässt, würde die Variable mit einer Länge von 15 in der Zieltabelle deklariert (da man ja der Variablen die Zeichen aus den Spalten 42 - 56 zuweisen lässt)
Ein Informat benötigt man, wenn man z.B. einen Text einlesen will, der ein Datum bedeutet. Dann muss man SAS 'sagen', wie die betrffenden Zeichen zu übernemen sind.
z.B. muss der Text 12NOV2016 mit dem Informat DATE9. eingelesen werden, damit der Text in der Zieltabelle zu einem Datumswert wird
Wenn man, wie im Code-Beispiel zu sehen, bei jedem Wert angibt, wo er beginnt und wo er endet, kann man auch Werte einfach überspringen, wenn man sie nicht in der Zieltabelle benötigt
Wenn man z.B. den Wert für loevm_A ncht benötigt, lässt man loevm_A einfach aus dem Input-Statement weg und der Code funktioniert immer noch
Dann wird einfach das Zeichen, das in der Spalte 19 der Rohdatenzeile steht, einfach nirgendwo verwendet
Viele Grüße
Andreas
... View more