am passing a DS in macro parameter with var= if its corresponding variable has same value but the variables has all missing values then drop it.
DATA details;
INPUT id name $ dept $ salary;
datalines;
01 John . 10000
02 Mary . 20000
03 Priya . 30000
05 Ram . 25000
;
DATA newdetails;
INPUT var_name $ var_core $;
DATALINES;
id perm
name perm
dept perm
salary req
;
%macro core_check(inds=,newds=,var_core_val= );
proc sql noprint;
select var_name
into :varname separated by ' '
from &newds
where var_core="&var_core_val.";
quit;
%let nvar=&sqlobs;
%put &varname;
%do i=1 %to &nvar;
%let var&i=%scan(&varname,&i);
proc sql;
select count(*)
into :nobs
from &inds where &&var&i is not missing ;
%put this = &nobs;
quit;
%end;
%mend;
%core_check(inds=work.details,newds=work.newdetails,var_core_val=perm);