Beim Refactoring eines Codes versuche ich, verschiedene Datensätze zu replizieren. Ich bestätige die Refactors wie folgt. Ich importiere den Live-/Originaldatensatz, sortiere ihn by _all_
. Ich sortiere den refaktorierten Datensatz by _all_
. Ich vergleiche dann die beiden.SAS - Datensatz wird nicht wie erwartet sortiert
%macro Validate(dataset);
data live_&dataset.;
set inFinal.&dataset.;
run;
proc sort data = live_&dataset. out = validation_original;
by _all_;
run;
proc sort data = &dataset. out = validation_refactor;
by _all_;
run;
proc compare error note
base = validation_original
compare = validation_refactor
;
run;
%mend;
Dies funktioniert aber für einen bizarren Fall. Der Datensatz enthält eine begin_date
und end_date
. PROC COMPARE
löst einen Fehler bei diesen Werten aus. Wenn ich nachforsche, passiert es, dass zwei Zeilen existieren, die identische Werte enthalten, aber für begin_date
und end_date
. Der Originaldatensatz ist trotz Durchlaufen PROC SORT
nicht korrekt sortiert.
Refactored Dataset
|-----+-----------+-------------+------+------------+------------+-------+-------+-------|
| id | numerator | denominator | rate | begin_date | end_date | junk1 | junk2 | junk3 |
|-----+-----------+-------------+------+------------+------------+-------+-------+-------|
| 123 | 0 | 0.41504 | 0 | 10/01/2015 | 10/31/2015 | ABC | XYZ | IOU |
|-----+-----------+-------------+------+------------+------------+-------+-------+-------|
| 123 | 0 | 0.41504 | 0 | 11/01/2015 | 11/30/2015 | ABC | XYZ | IOU |
|-----+-----------+-------------+------+------------+------------+-------+-------+-------|
Original Dataset
|-----+-----------+-------------+------+------------+------------+-------+-------+-------|
| id | numerator | denominator | rate | begin_date | end_date | junk1 | junk2 | junk3 |
|-----+-----------+-------------+------+------------+------------+-------+-------+-------|
| 123 | 0 | 0.41504 | 0 | 11/01/2015 | 11/30/2015 | ABC | XYZ | IOU |
|-----+-----------+-------------+------+------------+------------+-------+-------+-------|
| 123 | 0 | 0.41504 | 0 | 10/01/2015 | 10/31/2015 | ABC | XYZ | IOU |
|-----+-----------+-------------+------+------------+------------+-------+-------+-------|
Ich kann nicht erklären, warum dies ist. Die Fehlsortierung geschieht nur mit diesem bestimmten Datensatz. Wenn ich den Inhalt über PROC CONTENTS
überprüfe, sind sie identisch: sie haben die gleiche Anzahl von Beobachtungen, den gleichen Typ, die gleichen len, das gleiche Format, die gleiche Sortierreihenfolge, die gleiche Kodierung. Alles scheint identisch zu sein.
- Gibt es eine andere Möglichkeit, die beiden Datensätze zu validieren?
- Könnte das ein Fehler sein mit
PROC SORT
? - Könnte es eine Konsequenz davon sein, wie das Datum im Speicher dargestellt wird? (d. h. Gleitkommadarstellungsfehler)
Die Verwendung der "Runden" -Funktion (z. B. 5 d. P.) Bei der Berechnung des Nenners wird die Konsistenz über die Datensätze sicherstellen. – Longfish