在重构一些代码时,我试图复制各种数据集。我正在以下列方式确认重构。我导入实时/原始数据集,对其进行排序by _all_
。我对重构的数据集by _all_
进行排序。然后我比较两者。
%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
的错误吗?答案 0 :(得分:1)
由于"分母",数据集未按预期排序。当除了"分母"之外的所有变量执行排序时,数据集按预期排序并比较为相同。
<?php
class Follow extends User{
public function __construct($pdo){
$this->pdo = $pdo;
}
public function follow($user_id, $followerID){
//here will be query to insert follow in database
//now i need to sendNotification method from user
Message::sendNotification($user_id, $followerID, 'follow');
}
}
?>
计算&#34;分母&#34;的方法原始和重构之间有所不同。这可能会引入一点点表示错误。
为了实现验证,我做了以下工作。我重新排列了重构数据集,以便所有计算列最后出现。 Fatal error: Uncaught Error: Using $this when not in object context
只关心行的顺序而不关心列。因此,在对原始数据集进行排序之前,我获得了重构中的变量列表,并使用该列表对原始数据集进行了排序。无论列实际是什么,此方法都会在所有数据集中进行推广。
proc sort data = live_&dataset. out = validation_original;
by
id
numerator
rate
begin_date
end_date
junk1
junk2
junk3
;
run;