Sas 计算每个变量的数量,其中每个变量=1

Sas 计算每个变量的数量,其中每个变量=1,sas,Sas,如果每个变量=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

如果每个变量=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
首先,我创建一个datastep view work.is_even(视图以避免数据的完整拷贝),它以我需要的方式操作数据。 在这里,如果舍入值为偶数,它将变量的原始值(不在原始数据中,仅在该视图中)覆盖1,如果舍入值为奇数,则覆盖null。
然后,只需计算非缺失值(PROC MEANS中的N统计值)。

请包含一个正确格式的预期输出样本,以便人们了解您试图实现的结果。感谢您的建议。PROC FREQ效率较低-需要分别传递每个变量的数据以获得正确的结果。例如,proc freq data=xxx;表1;其中var1=1;跑proc freq data=xxx;表2;其中var2=1;跑谢谢Vasja和Ajay。Vasja,您创建的变量只有两个级别,在我之前的代码中将nmiss更改为n。但是我的变量有几个层次。我使用了proc-sql,但不是有效的方法。再次感谢!我以为你对一个特定值的计数感兴趣。如果您对所有级别都感兴趣,那么PROC FREQ确实是正确的,很抱歉拒绝。它还可以计算缺少的值。这里结合ODS的特点:ODS跟踪上;ods选择单向频率;ods输出单向频率=work.freqs;proc freq data=sashelp.class;表所有/无占比;输出=频率;跑ods追踪;我有几个级别,但只需要变量的频率“缺失”或“=1”。我有10年的数据集,每年部分变量需要两级(“缺失”或“=1”)频率。
%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;