BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
Ujjawal
Quartz | Level 8

I am trying to create a macro that drops all the variables having missing value % greater than 80. I have written a small code to get it started. But i am stuck how to take it forward.

  data have;

  set sashelp.class;

  if _n_ in (5,10,12) then do;

  call missing(height,weight);

  end;

  if _n_ in (7,9) then do;

  call missing(age);

  end;

run;

proc means data=have noprint;

var _numeric_;

output out=temp (drop=_type_) nmiss=;

run;

1 ACCEPTED SOLUTION

Accepted Solutions
data_null__
Jade | Level 19

You want to know the names of the variables that have more than some percentage missing?

data have;
   set sashelp.class;
   if _n_ in (5 10 12) then do;
     
call missing(height,weight);
      end;
  
if _n_ in (7 9) then do;
     
call missing(age);
      end;
   r = ranuni(
1);
   run;
ods output summary=nmiss;
proc means data=have stackods nmiss n;
  
var _numeric_;
   run;
ods output close;
proc print data=nmiss;
   run;

%let pmisslist=;
proc sql noprint;
  
select variable into :pmisslist separated by ' '
     
from nmiss where nmiss/(sum(n,nmiss)) ge .15;
  
quit;
  
run;
%put NOTE: &=PMISSLIST;     

View solution in original post

3 REPLIES 3
Steelers_In_DC
Barite | Level 11

I'm not sure if this is what you want, let me know:

  data have;

  set sashelp.class;

  if _n_ in (5,10,12) then do;

  call missing(height,weight);

  end;

  if _n_ in (7,9) then do;

  call missing(age);

  end;

run;

data want;

set have;

if missing(height) or missing(weight) then delete;

run;

data_null__
Jade | Level 19

You want to know the names of the variables that have more than some percentage missing?

data have;
   set sashelp.class;
   if _n_ in (5 10 12) then do;
     
call missing(height,weight);
      end;
  
if _n_ in (7 9) then do;
     
call missing(age);
      end;
   r = ranuni(
1);
   run;
ods output summary=nmiss;
proc means data=have stackods nmiss n;
  
var _numeric_;
   run;
ods output close;
proc print data=nmiss;
   run;

%let pmisslist=;
proc sql noprint;
  
select variable into :pmisslist separated by ' '
     
from nmiss where nmiss/(sum(n,nmiss)) ge .15;
  
quit;
  
run;
%put NOTE: &=PMISSLIST;     
Ujjawal
Quartz | Level 8

How can i replicate the same for character variables? PROC MEANS does not work for character variables and PROC FREQ produces clumsy output. Thanks in anticipation!

hackathon24-white-horiz.png

2025 SAS Hackathon: There is still time!

Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!

Register Now

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 3 replies
  • 5507 views
  • 0 likes
  • 3 in conversation