在重構一些代碼時,我試圖複製各種數據集。我以如下方式確認重構。我導入實時/原始數據集,對其進行排序by _all_
。我對重構數據集by _all_
進行排序。然後我比較兩者。SAS - 數據集未按預期排序
%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;
這有效,但對於一個奇怪的情況。該數據集包含begin_date
和end_date
。 PROC COMPARE
在這些值上引發錯誤。當我調查時,碰巧有兩行包含相同的值,但對於begin_date
和end_date
。儘管已經通過PROC SORT
運行,但原始數據集未正確排序。
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 |
|-----+-----------+-------------+------+------------+------------+-------+-------+-------|
我不能說明這是爲什麼。錯誤排序只發生在這個特定的數據集上。當我通過PROC CONTENTS
檢查內容時,它們是相同的:它們具有相同數量的觀察值,相同的類型,相同的len,相同的格式,相同的排序順序,相同的編碼。一切似乎都是一樣的。
- 是否有另一種方法來驗證兩個數據集?
- 這可能是
PROC SORT
的錯誤嗎? - 可能是日期如何在內存中表示的結果? (即浮點表示錯誤)
計算分母時使用'round'函數(例如5個d.p.)將確保所有數據集的一致性。 – Longfish