对多个观测值进行求和时,PROC SUMMMARY方法的替代方法

时间:2019-01-23 18:01:06

标签: sas

我正在处理多种格式的重复测量数据集。每个观察值代表一个对象的一个​​度量,每个对象度量六次。数据主要包含虚拟变量。

我希望对每个主题的所有六个观测值进行唯一的虚拟变量值计数。

拥有:

 MeasurementNum    SubjectID    Dummy0    Dummy1    Dummy2    Dummy3   Dummy4         
-----------------------------------------------------------------------------   
            1          1          1          1         0         0         0
            2          1          0          1         0         1         0
            3          1          -          -         -         -         -
            4          1          0          0         1         1         0
            5          1          -          -         -         -         -
            6          1          0          0         0         1         0
            1          2          1          0         0         1         0
            2          2          0          0         0         0         0  
            3          2          0          1         0         0         0
            4          2          1          1         0         1         0
            5          2          -          -         -         -         -  
            6          2          1          1         1         0         0  

想要:

                                       Total for       Overall
 MeasurementNum    SubjectID    ...    MeasurementNUM  Total      
--------------------------------...-----------------------------  
            1          1        ...          2         4                  
            2          1        ...          2         4                  
            3          1        ...          -         4                  
            4          1        ...          2         4                 
            5          1        ...          -         4                
            6          1        ...          1         4                  
            1          2        ...          2         4                  
            2          2        ...          0         4                    
            3          2        ...          1         4                  
            4          2        ...          3         4                  
            5          2        ...          -         4                    
            6          2        ...          3         4                                 

我目前的方法是使用Proc MEANSBYOUTPUT语句将每个主题中的所有六行合并为一个保留值1的行,如this中所述题。然后,我使用Proc SUMMARY获取have语句中变量'Total`下列出的值。

proc summary
data=have;
By SubjectID
class Dummy1-4;
output out=want sum=sum;  

有没有一种方法可以在不先合并行的情况下获得观测值中的唯一/唯一计数?

我更喜欢PROC SQL,因为它还允许我根据工作数据集中存在的主题协变量进行条件计数。即在特定于该对象的协变量的条件下生成需求描述。

1 个答案:

答案 0 :(得分:1)

我怀疑使用PROC SUMMARY(又名PROC MEANS)将是最简单的方法。听起来好像您想为每个主题找到MAX,然后对这些主题求和以求和。

proc summary data=have nway ;
  class SubjectID ;
  var Dummy0-Dummy999;
  output out=any(drop=_type_ _freq_) n=n_reps max= ;
run;

data want ;
  set any ;
  total = sum(of Dummy0-Dummy999) ;
run;

不确定SQL如何帮助条件计数。但是您可以使用PROC SQL一步生成计数和总计,但这将需要如下墙纸代码:

proc sql ;
  create table want as 
    select SubjectID
         , count(*) as n_reps
         , max(dummy0) as dummy0
         , max(dummy1) as dummy1
         ...
         , max(dummy999) as dumyy999
         , sum
         ( max(dummy0) 
         , max(dummy1) 
         ...
         , max(dummy999)
         ) as Total
    from have
    group by 1
  ;
quit;

您可能可以定义一个宏(或其他工具),以从变量名列表中为您生成墙纸代码。