2017-02-08 3 views
1

Ich bereite SAS BASE Test vor. Im Testbuch Kapitel 17 Lesen von Free-Format-Daten finden Sie ein Beispiel, wie Sie Zeichenwerte mit eingebetteten Leerzeichen und nicht standardmäßigen Werten wie Zahlen mit Komma lesen können. Ich habe es getestet und sein Ergebnis ist nicht das, was das Buch beschrieben hat.geänderte Listeneingabe, wenn der Zeichenwert Leerzeichen enthält

data cityrank; 
infile datalines; 
input rank city & $12. pop86: comma.; 
datalines; 
1 NEW YORK 7,262,700 
2 LOS ANGELES 3,259,340 
3 CHICAGO 3,009,530 
4 HOUSTON 1,728,910 
5 PHILADELPHIA 1,642,900 
6 DETROIT 1,086,220 
7 DAN DIEGO 1,015,190 
8 DALLAS 1,003,520 
9 SAN ANTONIA 914,350 
; 

was ich habe ist wie folgt, Datensatz hat 4 obs.

rank city   pop86 
1 NEW YORK 7,2 2 
3 CHICAGO 3,00 4 
5 PHILADELPHIA 6 
7 DAN DIEGO 1, 8 

Bin ich falsch irgendwo das Programm eingeben? Ich habe es immer wieder überprüft, dass ich es richtig kopiere.

Wie ändert man dieses Programm?

Vielen Dank!

+0

dachte ich zumindest Philadelphia richtigen Pop86 Wert bekommen, aber immer noch nicht. verstehe nicht warum für diese Stadt. andere weil Zeichenzahl 12 ist. sehr interessant. – Lin

Antwort

0

Ich rate von den Tippfehlern, die Sie nicht kopieren, einfügen, aber Sie haben es stattdessen eingegeben.

So haben Sie (oder die Buchautoren) einen weiteren Tippfehler gemacht: Es gibt zwei Leerzeichen nach den Städtenamen, nicht eins (oder zumindest sollte es sein). Das ist, was die & tut: es heißt "warten auf zwei aufeinander folgende Trennzeichen" (so dass ein einzelnes Trennzeichen ignoriert werden kann, so dass New York in eine Variable statt in eine Variable eingelesen wird).

dies wäre also richtig sein:

data cityrank; 
infile datalines; 
input rank city & $12. pop86: comma.; 
datalines; 
1 NEW YORK 7,262,700 
2 LOS ANGELES 3,259,340 
3 CHICAGO 3,009,530 
4 HOUSTON 1,728,910 
5 PHILADELPHIA 1,642,900 
6 DETROIT 1,086,220 
7 SAN DIEGO 1,015,190 
8 DALLAS 1,003,520 
9 SAN ANTONIO 914,350 
; 
run; 
+0

Danke Joe! Du hast Recht und Buch sagt das so, zwei oder mehr aufeinanderfolgende Trennzeichen. Jetzt funktioniert es wie im Buch beschrieben. – Lin

+0

Aber ich frage mich immer noch in der realen Welt, was ist, wenn in meinem ersten Post eine Rohdaten existiert. Was sollten wir tun, um die Aufzeichnungen richtig zu lesen? Vielen Dank! – Lin

+0

In der realen Welt hätten Sie ohne eine Menge Arbeit keine gute Lösung, denn es gibt keinen offensichtlichen Weg, um zu sagen, dass "NEW YORK" ein Feld ist. Sie müssten wahrscheinlich eine Vorverarbeitung durchführen, die erkennen würde, dass ein naives Einlesen "YORK" in ein numerisches Feld einfügt und dann das Feld anführt ("NEW YORK" würde dann, wenn Sie die DSD-Option verwenden, als ein Feld eingelesen werden). Aber in realen Szenarien ist das oft sehr unordentlich. – Joe

Verwandte Themen