SAS中文论坛

标题: 求助:frequency of missing data for each variable every year? [打印本页]

作者: shiyiming    时间: 2011-12-30 04:04
标题: 求助:frequency of missing data for each variable every year?
我有6年数据,怎样求[b:t098wzmo] 每年的 frequency of missing data for each variable.[/b:t098wzmo]

我的程序: 但不是每年的,怎样加每年? 或者高手有更简便的方法,谢谢先!

proc contents data=inpatient noprint out=nametype(keep=name);
run;

data y;
     set nametype end = eof;
     n + 1;
     if eof then call symput('num', put(n,2.));
     call symput('var'||left(put(n,2.)),name);
run;

proc sql;
  create table missingfreq (
      Variables char(40), Percent num
     );
quit;

%macro getfre;
  %do i = 1 %to #
    proc freq data=inpa  noprint;
           tables &&var&i/missing out=tbl&&var&i ;
    run;

        data a;
          set tbl&&var&i;
          if &&var&i='';
          Variables="&&var&i";
          keep variables percent;
        run;
  
    proc append base=missingfreq data=a  force;
    run;   
  %end;
%mend getfre;
%getfre;
作者: shiyiming    时间: 2011-12-30 23:40
标题: Re: 求助:frequency of missing data for each variable every yea
Assume: there is a variable 'Year' in your dataset.

%macro getmissing;
proc sql noprint;
   select name into: allNvar separated by '  '
from dictionary.columns where libname eq 'WORK' and memname eq "INPATIENT" and lowcase(name) not in ('year') and type eq 'num';
%let numnvar=&sqlobs;
   select name into: allCvar separated by '  '
from dictionary.columns where libname eq 'WORK' and memname eq "INPATIENT" and lowcase(name) not in ('year') and type ne 'num';
%let numcvar=&sqlobs;
quit;

proc sort data=inpatient;
by year;
run;

data out;
length variables $32;
set inpatient;
by year;
array allc(&numcvar) &allcvar;
array cntc(&nmucvar);
array alln(&numnvar) &allnvar;
array cntn(&numnvar);
retain cntc1-cntc&numcvar cntn1-cntn&numnvar n 0;
if first.year then do;
n=0;
do i=1 to &numnvar;
cntn(i=0;
end;
do i=1 to &numcvar;
cntc(i)=0;
end;
end;
n+1
do i=1 to &numnvar;
cntn(i)+missing(alln(i));
end;
do i=1 to &numcvar;
cntc(i)+missing(allc(i));
end;
if last.year then do;
%do i=1 %to &numnvar;
%let var=%scan(&allnvar,&i)
Variables="&var";
Percent=100*cntn&i/n;
output;
%end;
%do i=1 %to &numcvar;
%let var=%scan(&allcvar,&i)
Variables="&var";
Percent=100*cntc&i/n;
output;
%end;
end;
keep year variables percent;
run;

%mend;

%getmissing;
作者: shiyiming    时间: 2012-5-16 21:59
标题: Re: 求助:frequency of missing data for each variable every yea
在你的问题中,没有给出数据,我就虚构了一份,
以下程序能解决你的问题。


data ads;
input x y;
cards;
1 .
1 1
1 .
2 .
2 .
2 .
2 5
2 12
3 1
3 2
3 .
;
data bds;
set ads;
ind=missing(y);
run;

proc means data=bds sum;
by x;
var ind;
run;




欢迎光临 SAS中文论坛 (http://www.mysas.net/forum/) Powered by Discuz! X3.2