2016-05-06 6 views
0

Ich habe zwei Datensätze, einen aus .xlsx und einen aus .csv importiert. Ich scannte, trimmte, up-case und all diese Sachen, um die zwei Datensätze zu bereinigen. Ich probierte sowohl proc sql und Datenschritt, um die zwei durch eine Zeichenvariable zusammenzuführen. SAS kann keine Übereinstimmung finden. Wenn ich jedoch die beiden Datensätze zurück nach .xlsx exportiere, kopiere und füge ich die Zeichenspalte aus den beiden Mengen nebeneinander ein. Natürlich gibt es viele Übereinstimmungen, und Excel erkennt auch, dass sie identisch sind (verwende if-Anweisung, um sie zu überprüfen).SAS ist nicht in der Lage, zwei Datensätze durch übereinstimmende Zeichenvariablen zusammenzuführen

Was geht hier vor?

Danke!

+0

Sehr wahrscheinlich unsichtbare Zeichen irgendeiner Art, fügen Sie ein paar Ihrer übereinstimmenden Werte in das Protokoll ein, um zu sehen, ob sie sich unterscheiden. Oder Ihr Code ist falsch - da wir ihn nicht sehen können, können wir nur raten. In diesen Fällen müssen Sie in der Lage sein, Beispieldaten zu posten - die Ausgabe der Ergebnisse aus der Put-Anweisung mit einem Hex-Format ist zumindest ein guter Anfang. Im Moment haben wir nicht viel zu tun. – Reeza

+0

Sie sind direkt auf @Reeza! Das Hex-Format zeigt, dass sie unterschiedlich sind. Zum Beispiel eine 4269726D696E6768616D2020202020 und eine andere ist 204269726D696E6768616D20202020, aber beide zeigt "Birmingham" ... Okay, ich überprüfe die ASCII-Codetabelle, 20 entspricht dem Raum. Aber ich habe trim() verwendet ... Danke! – user5309995

+1

Sieht so aus, als hätten Sie einen führenden Platz im Wert. Haben Sie die COMPRESS() Funktion ausprobiert? Sieh dir die Modifikatoren an und wähle diejenige aus, die nicht druckbare Zeichen entfernt. Ich kann mich nicht mehr an meinen Kopf erinnern. – Reeza

Antwort

1

Wahrscheinlich haben Sie unsichtbare Zeichen in Ihren Variablen, die das Problem verursachen. Um diese anzuzeigen, geben Sie die Variablen im Hexadezimalformat aus, um den Unterschied zu sehen.

Mit der Funktion COMPRESS() können Sie alle unsichtbaren Zeichen entfernen.

0

Es kann schwierig sein, das Vorhandensein führender Leerzeichen in den Werten einer Variablen zu debuggen. Der Standardeffekt der PUT-Anweisung besteht darin, sie zu entfernen. Sie müssen $ CHAR verwenden. oder $ VARYING. Format, um die führenden Leerzeichen zu erhalten. Das $ ZITAT. Format kann auch helfen. Oder Sie können die Zeichenfolge mit druckbaren Zeichen umgeben, sodass PUT die führenden Leerzeichen nicht mit der Funktion QUOTE() oder CAT() entfernt.

Verwenden Sie die Funktion LEFT(), um die führenden Leerzeichen zu entfernen.

Sie können auch die Funktion STRIP() verwenden, um sowohl führende als auch nachfolgende Leerzeichen zu entfernen, aber SAS-Vergleiche interessieren nicht für nachstehende Leerzeichen. Und wenn Sie den Wert zurück in eine Zeichenvariable zuweisen, kommen die nachfolgenden Leerzeichen einfach wieder zurück, da SAS-Zeichenvariablen feste Länge haben und auf der rechten Seite mit Leerzeichen aufgefüllt sind.

Verwandte Themen