【问题标题】:SAS comparing frequencies of two data setsSAS比较两个数据集的频率
【发布时间】:2016-03-29 21:34:18
【问题描述】:

我有两个数据集。他们的主题是同一组,但不同的研究人员抽取了不同的“样本”。因此,

  • 我无法识别匹配项(即两个样本中的 Peter Smith),

  • 虽然含义相同,但变量的名称不同,

  • 变量位于数据集的不同位置

现在我想比较这两个数据集,看看它们作为一个整体有多相似。我考虑过比较我知道它们具有相同含义的变量的频率输出。

到目前为止,我的解决方案在我看来相当繁琐,因为我必须为每个变量组合执行所有步骤。

  1. 有没有更优雅/高效的解决方案?

  2. 我还想比较数值变量的平均值、中位数、百分位数。

非常感谢您!

格瑞特

这是我当前的解决方案示例。我以不同的方式命名了这些观察结果,因为在我的原始文件中,我无法从 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;              

【问题讨论】:

  • 不要合并不相关的数据集!幸运的是,他们有相同数量的观察结果,并且您的统计数据很有意义,但是您创建的数据集是垃圾。

标签: sas compare proc


【解决方案1】:

你会从

那里得到相当多的信息
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;

【讨论】:

  • 感谢您的回答。图表看起来很酷。是否可以将两个等效变量(例如街道和道路)的结果彼此相邻?这将使比较更容易。另外,我想“自动”比较两个等效变量的均值等。我远不想合并数据集。我只是想比较一下描述性统计数据,复制并粘贴到 Excel 中并不那么漂亮。
  • 当然可以,格瑞特。基本上,你需要category=sourcepanelby = meaning,其中meaning是你根据_name_的值填写的变量。我今天没有时间测试它。
  • 对于图表,我只是错过了如何并排获得不同含义的步骤,在这种情况下不会被“其他”打断。 data both; set both; if _name_ in ('goal' 'finish') then meaning = 'goal'; else if _name_ in ('street' 'road') then meaning = 'road'; else if _name_ in ('means' 'purpose') then meaning = 'means'; else meaning = _name_; run; proc sgpanel data=both; panelby meaning _name_; vbox col1 / category= source; run; 怎样才能比较数字上的统计数据?
猜你喜欢
  • 2015-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-30
  • 1970-01-01
  • 2014-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多