Сортировка SAS Proc отличается от порядка SQL Proc по - PullRequest
0 голосов
/ 14 октября 2018

Я отсортировал набор данных по нескольким переменным с помощью процедуры сортировки, а затем продолжил делать шаг данных, назначая переменную count на основе отсортированных полей.Запуск этого кода несколько раз дает один и тот же ответ.Если я использую proc sql и order by вместо proc sort, а затем с тем же кодом шага данных, я получу другой ответ.Почему это случилось?

1 Ответ

0 голосов
/ 15 октября 2018

Ваши переменные 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.     
...