SAS сравнивает две таблицы с разным порядком столбцов - PullRequest
0 голосов
/ 08 ноября 2018

Привет. У меня есть две таблицы с разными порядками столбцов, и имя столбца не пишется с заглавной буквы. Как я могу сравнить, если содержимое этих двух таблиц одинаковы?

Например, у меня есть две таблицы оценок учеников

  table A:

        Math   English  History
      -------+--------+---------  
   Tim   98      95        90
  Helen 100      92        85


 table B:

        history   MATH    english
       --------+--------+---------  
   Tim   90       98        95
  Helen  85      100        92

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

используйте, кроме corr (соответствующий), он проверит по имени. если все совпадает, вы получите ноль записей.

 data have1;
 input  Math   English  History;
datalines;
1 2 3
;
run;

data have2;
input English math History;
datalines;
 2 1 3
;
run;



proc sql ;
select * from have1
 except corr
 select * from have2;

edit1

если вы хотите проверить, какой конкретно столбец отличается, вам, возможно, придется транспонировать и сравнить, как показано в примере ниже.

data have1;
 input name $ Math   English pyschology History;
 datalines;
  Tim 98      95     76   90
 Helen 100      92   55     85
  ;
 run;

data have2;
input name $ English Math pyschology History;
datalines;
Tim       95   98  76   90
 Helen    92  100 99    85
 ;
run;

 proc sort data = have1 out =hav1;
 by name;
run;

 proc sort data = have2 out =hav2;
 by name;
  run;

 proc transpose data =hav1 out=newhave1 (rename = (_name_= subject 
 col1=marks));
 by name;
  run;

  proc transpose data =hav2 out=newhave2 (rename = (_name_= subject 
 col1=marks));
 by name;
 run;


 proc sql;
create table want(drop=mark_dif) as
 select 
 a.name as name
,a.subject as subject
,a.marks as have1_marks
,b.marks as have2_marks
,a.marks -b.marks as mark_dif
from  newhave1 a inner join newhave2 b
on upcase(a.name)  = upcase(b.name)
and upcase(a.subject) =upcase(b.subject)
where calculated mark_dif ne 0;
0 голосов
/ 09 ноября 2018

Вы можете использовать любой из двух подходов для сравнения, независимо от порядка или имени столбца

/*1. Proc compare*/

proc sort data=A; by name; run;
proc sort data=B; by name; run;

proc compare base=A compare=B;
   id name;
run;

/*2. Proc SQL*/
proc sql;
select Math, English, History from A
<union/ intersect/ Except>
select MATH, english, history from B;
quit; 
...