2016-03-29 1 views
0

J'ai deux ensembles de données. Leur sujet est le même groupe, mais différents "échantillons" sont dessinés par différents chercheurs. Par conséquent,SAS comparant les fréquences de deux ensembles de données

  • Je ne peux pas identifier les matchs (c.-à-Peter Smith dans les deux échantillons),

  • variables sont nommées différemment si elles ont la même signification,

    les variables
  • sont dans des endroits différents des ensembles de données

Maintenant, je voudrais comparer les deux ensembles de données pour voir à quel point ils sont similaires dans leur ensemble. J'ai pensé à comparer les sorties de fréquence pour des variables dont je sais qu'elles ont le même sens. Jusqu'à présent, ma solution est plutôt lourde à mes yeux, car je devrais faire toutes les étapes pour chaque combinaison de variables.

  1. Existe-t-il une solution plus élégante/efficace?

  2. Je voudrais également comparer les percentiles moyens, médians, pour les variables numériques.

Merci beaucoup d'avance!

Gerit

Voici ma solution actuelle pour un exemple. J'ai nommé toutes les observations différemment car je ne peux pas, dans mon fichier original, dire à partir de la variable ID quelle observation est laquelle.

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

Ne pas fusionner des ensembles de données non liées! Heureux pour vous, ils ont le même nombre d'observations et vos statistiques ont un sens, mais l'ensemble de données que vous créez est de la merde. –

Répondre

0

Vous obtiendrez des informations assez de

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; 

ou un équivalent graphique avec des parcelles de boîte:

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

Merci pour votre réponse. Le graphique a l'air cool. Est-il possible d'avoir les résultats pour deux variables équivalentes (par exemple, rue et route) les unes à côté des autres? Cela faciliterait la comparaison. Aussi, je voudrais comparer les moyennes etc. de deux variables équivalentes "automatiquement". Je suis loin de vouloir fusionner les ensembles de données. Je voudrais juste comparer les statistiques deskriptive et copier et coller dans Excel n'est pas si joli. – Gerit

+0

Bien sûr que c'est possible, Gerit. Fondamentalement, vous avez besoin de 'category = source' et' panelby = meaning', dans lequel 'meaning' est une variable que vous remplissez en fonction de la valeur de' _name_'. Je n'ai pas le temps de le tester aujourd'hui. –

+0

Avec les graphiques, il me manque seulement l'étape comment obtenir les différentes significations côte à côte et pas interrompu par "autre" dans ce cas.'données à la fois; définir les deux; si _name_ dans ('goal' 'termine') puis signifiant = 'goal'; \t sinon si _name_ dans ('street' 'road') alors sens = 'route'; \t sinon si _name_ dans ('signifie' 'but' ') alors signification =' signifie '; \t autre signification = _name_; course; proc sgpanel data = les deux; panelby signifiant _name_; vbox col1/catégorie = source; run; 'Et comment peut-on comparer les statistiques de deskripitve en chiffres? – Gerit