2012-06-07 155 views
-1

您可以帮助计算每个变量数量为1的变量吗?我发布了如何在这里计算缺少的数字。希望它是类似的方式。提前致谢。计算每个变量的数量,其中每个变量= 1

/*y00*/ 
%let list0=OCALZHMR OCARTERY OCARTH OCCHD OCDIABTS OCHBP OCMENTAL OCMYOCAR 
      OCOTHART OCPSYCH OCSTROKE; 

/*y01 and y02*/ 
%let list1=D_CFAIL D_CHD D_HBP D_MYOCAR D_OTHHRT D_PSYCH D_RHYTHM D_STROKE 
     D_VALVE OCALZHMR OCARTERY OCARTH OCCHD OCDIABTS OCHBP OCMENTAL OCMYOCAR 
     OCOTHART OCPSYCH OCSTROKE; 


proc means data=cohort00 nmiss noprint; 
    var &list0; 
    output out=y2000_nmiss(drop=_:) nmiss= ; 
run; 

proc means data=cohort01 nmiss noprint; 
    var &list1; 
    output out=y2001_nmiss(drop=_:) nmiss= ; 
run; 

data y2000_nmiss; 
set y2000_nmiss; 
j=1; 
run; 

data y2001_nmiss; 
set y2001_nmiss; 
j=1; 
run; 

proc transpose data=y2000_nmiss out=long0(rename=(COL1=Y2000 _name_=VAR)); 
    by j; 
run; 
proc transpose data=y2001_nmiss out=long1(rename=(COL1=Y2001 _name_=VAR)); 
    by j; 
run; 

data ATC_missing; 
    merge long0 long1; 
    by VAR; 
    drop j; 
run; 

这里是输出表中的丢失的数量的部分:

VARS Y2000 Y2001 Y2002 
OCDIABTS 0  1  0 
OCHBP  0  0  0 
OCMENTAL 17 18  10 
OCMYOCAR 0  0  0 
OCOTHART 0  0  4758 
OCOTHHRT .  .  . 
OCPSYCH  0  0  0 
+1

请包括**预期输出的格式正确的样本**,以便人们了解您尝试实现的结果。 –

+0

感谢您的好建议。 – user1238178

回答

0
%let list1=Width Length Depth; 

data work.is_even/view=work.is_even; 
set sashelp.lake; 
    array vars {*} &list1 ; 
    drop i; 
    do i=1 to dim(vars); 
     if mod(round(vars(i), 1),2) = 0 /* would be VARS(I)=1 for your case */ 
     then vars(i)=1; 
    else vars(i)=.; 
    end; 
run; 

proc means data=work.is_even n; 
run; 

首先我,以避免数据的完整副本创建datastep视图work.is_even(图)以我需要的方式处理数据。 这里它覆盖变量的原始值(不是在原始数据中,只在该视图中),如果四舍五入的值是偶数,则为1;如果是奇数,则为null。 然后,只计算非缺失值(PROC MEANS中的N统计量)。

+0

PROC FREQ效率较低 - 需要分别为每个变量传递数据以获得正确的结果。例如。 proc freq data = xxx; table var1;其中var1 = 1; run; proc freq data = xxx; table var2;其中var2 = 1; run; – vasja

+0

感谢Vasja和Ajay。 Vasja,你创建的变量只有两个级别,只是将nmiss改为我之前的代码。但我的变量有**几个级别**。我使用** proc sql **但效率不高。再次感谢! – user1238178

+0

我以为你对一个特定值的计数感兴趣。如果你对各个层面感兴趣,那么PROC FREQ确实是正确的,抱歉拒绝。它也可以计算缺失的值。这里结合ODS功能:ods trace on; ods select OneWayFreqs; ods output OneWayFreqs = work.freqs; proc freq data = sashelp.class; tables _all_/nocum nopercent; 输出= freqs; 跑; ods trace off; – vasja