Ваши переменные KEY имеют дубликаты, где третья (или более) переменная отличается.И это не совсем так, потому что вы не указали эти третьи (или другие) переменные.
Вот пример того, как это происходит.
/*Creates duplicate records with variables that are different for the remaining values*/
data temp_class;
set class (obs=3);
call streaminit(25);
weight = weight + rand('normal', 0, 5);
run;
data class;
set sashelp.class temp_class;
run;
*proc sort;
proc sort data=class out=class2;
by name sex;
run;
*proc sql sort;
proc sql;
create table class3 as
select *
from class
order by name, sex;
quit;
*comparison to show difference;
proc compare data=class2 compare=class3;
run;
Результаты показывают, что они дают разные результаты, поскольку ключевые переменные не определены должным образом.Чтобы избежать этого, вы также должны отсортировать по переменной WEIGHT, чтобы убедиться, что заказ получен.
The COMPARE Procedure
Comparison of WORK.CLASS2 with WORK.CLASS3
(Method=EXACT)
Data Set Summary
Dataset Created Modified NVar NObs
WORK.CLASS2 27SEP18:16:15:28 27SEP18:16:15:28 5 22
WORK.CLASS3 27SEP18:16:14:47 27SEP18:16:14:47 5 22
Variables Summary
Number of Variables in Common: 5.
Observation Summary
Observation Base Compare
First Obs 1 1
First Unequal 1 1
Last Unequal 4 4
Last Obs 22 22
Number of Observations in Common: 22.
Total Number of Observations Read from WORK.CLASS2: 22.
Total Number of Observations Read from WORK.CLASS3: 22.
Number of Observations with Some Compared Variables Unequal: 4.
Number of Observations with All Compared Variables Equal: 18.
Values Comparison Summary
Number of Variables Compared with All Observations Equal: 4.
Number of Variables Compared with Some Observations Unequal: 1.
Total Number of Values which Compare Unequal: 4.
Maximum Difference: 5.4405.
Variables with Unequal Values
Variable Type Len Ndif MaxDif
Weight NUM 8 4 5.440
The COMPARE Procedure
Comparison of WORK.CLASS2 with WORK.CLASS3
(Method=EXACT)
Value Comparison Results for Variables
__________________________________________________________
|| Base Compare
Obs || Weight Weight Diff. % Diff
________ || _________ _________ _________ _________
||
1 || 112.5000 117.3936 4.8936 4.3499
2 || 117.3936 112.5000 -4.8936 -4.1686
3 || 84.0000 78.5595 -5.4405 -6.4767
4 || 78.5595 84.0000 5.4405 6.9253
__________________________________________________________
Вот версия с ВЕСОМ, включенным в список переменных, чтобы гарантировать правильность сортировки.
*proc sort;
proc sort data=class out=class4;
by name sex;
run;
*proc sql sort;
proc sql;
create table class5 as
select *
from class
order by name, sex;
quit;
*comparison to show difference;
proc compare data=class4 compare=class5;
run;
Результаты не показывают различий в этом случае:
The COMPARE Procedure
Comparison of WORK.CLASS4 with WORK.CLASS5
(Method=EXACT)
Data Set Summary
Dataset Created Modified NVar NObs
WORK.CLASS4 27SEP18:16:21:13 27SEP18:16:21:13 5 22
WORK.CLASS5 27SEP18:16:21:13 27SEP18:16:21:13 5 22
Variables Summary
Number of Variables in Common: 5.
Observation Summary
Observation Base Compare
First Obs 1 1
Last Obs 22 22
Number of Observations in Common: 22.
Total Number of Observations Read from WORK.CLASS4: 22.
Total Number of Observations Read from WORK.CLASS5: 22.
Number of Observations with Some Compared Variables Unequal: 0.
Number of Observations with All Compared Variables Equal: 22.
NOTE: No unequal values were found. All values compared are exactly equal.