-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
4

1 に答える 1

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;

まず、必要な方法でデータを操作するデータステップビューwork.is_even(データの完全なコピーを回避するためのビュー)を作成します。ここでは、変数の元の値(元のデータではなく、そのビューのみ)を、丸められた値が偶数の場合は1、奇数の場合はnullでオーバーライドします。次に、欠落していない値を数えます(PROC MEANSのN統計)。

于 2012-06-08T08:19:32.813 に答える