2016-03-29 2 views
0

У меня есть два набора данных. Их предметом является одна и та же группа, но разные «образцы» рисуются разными исследователями. Следовательно,SAS, сравнивая частоты двух наборов данных

  • я не могу определить матчи (т.е. Peter Smith в обоих образцах),

  • переменные называются по-разному, хотя они означают то же самое,

  • переменные находятся в разных местах наборов данных

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

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

  1. Есть ли более элегантное/эффективное решение?

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

спасибо, что заблаговременно!

Gerit

Вот мое текущее решение для примера. Я назвал все наблюдения по-разному, так как я не могу, в своем исходном файле, указать из переменной ID, какой является наблюдение.

data have1;             
    input Name $ road means goal ;       
    datalines;             
adam 1 3 0             
bob 1 1 1              
clint 2 2 0              
dean 3 1 1              
eric 2 1 0 
flint 1 2 1             
gerald 3 1 1             
;                
run;               
data have2;             
    input Name $ street finish other purpose ;    
    datalines;            
harry 2 1 0 3            
idefix 1 0 0 2            
john 3 1 1 2            
kelvin 1 0 2 2            
liam 2 1 2 1            
max 3 1 2 1            
nero 2 0 1 3            
ovid 3 0 2 3            
;                
run;               

proc freq data=have1;           
    tables road/out= fhave1road       
      (rename=(percent=pct1 count=count1));    
quit;               
proc freq data=have2;           
    tables street/out= fhave2street      
      (rename=(street = road percent=pct2 count=count2)); 
quit;               

data comb;             
    merge fhave1road fhave2street;       
    by road;             
diffpct = pct1 - pct2;          
diffct = count1 - count2;          
run;               

proc print data = comb;          
    var road count1 count2 diffct pct1 pct2 diffpct;   
quit;               

proc means data=have1; 
    var road; 
    output out=mhave1road ; 
quit; 
proc sort data=mhave1road; 
    by _STAT_; 
quit; 
proc means data=have2; 
    var street; 
    output out=mhave2street ; 
quit; 
proc sort data=mhave2street; 
    by _STAT_; 
quit; 
data mcomb (keep=_STAT_ road street diff) ; 
    merge mhave1road mhave2street;  
    by _STAT_; 
diff = road-street; 
run; 
proc print data = mcomb; 
quit;    
+0

Не сливать несвязанные наборы данных! К счастью для вас, у них одинаковое количество наблюдений, и ваша статистика имеет смысл, но набор данных, который вы создаете, - это дерьмо. –

ответ

0

вы получите довольно некоторую информацию от

title 'have1'; 
proc means data=have1 min p25 mean median p75 max; 
run; 
title 'have2'; 
proc means data=have2 min p25 mean median p75 max; 
run; 

или графического эквивалента с коробкой участками:

title 'have1'; 
proc transpose data=have1 out=trans1; 
    by Name; 
    var road means goal; 
run; 
title 'have2'; 
proc transpose data=have2 out=trans2; 
    by Name; 
    var street finish other purpose; 
run; 
title 'both'; 
data both; 
    set trans1 (in=in1) trans2 (in=in2); 
    if in1 then source = 1; 
    if in2 then source = 2; 
run; 
proc sgpanel data=both; 
    panelby source; 
    vbox col1/category= _name_; 
run; 
+0

Благодарим вас за ответ. График выглядит круто. Можно ли получить результаты для двух эквивалентных переменных (например, улицы и дороги) рядом друг с другом? Это упростит сравнение. Кроме того, я хотел бы сравнить средства и т. Д. Двух эквивалентных переменных «автоматически». Я далек от желания объединить наборы данных. Я просто хотел бы сравнить статистику deskriptive и скопировать и вставить в Excel не так красиво. – Gerit

+0

Конечно, это возможно, Герит. В принципе, вам нужны 'category = source' и' panelby = значение', в которых 'значение' является переменной, которую вы заполняете на основе значения' _name_'. У меня нет времени проверять его сегодня. –

+0

С графиками я просто пропустил шаг, как получить различное значение бок о бок и не прерываться «другим» в этом случае.'данные оба; комплект обоих; if _name_ in ('goal' 'finish'), тогда значение = 'goal'; \t else if _name_ in ('улица' 'дорога'), то значение = 'дорога'; \t else if _name_ in ('означает' 'цель'), тогда значение = 'означает'; \t else Значение = _name_; run; proc sgpanel data = both; panelby означает _name_; vbox col1/category = source; run; 'И как сравнить статистику deskripitve в числах? – Gerit