Hello,
data have;
input x $ y;
cards;
1 .
2 6
. 6
4 8
. 10
6 10
7 .
. 16
9 16
. 20
;
run;
data _NULL_;
set have;
length _NAME $32.;
call execute('proc sql noprint; CREATE TABLE counts AS SELECT ');
do until (_NAME='_NAME');
i+1;
call vnext(_NAME);
if _NAME ne '_NAME' then
call execute(cats('"', _NAME, '" AS var_name',i,', sum(missing(', strip(_NAME),')) AS nmiss', i,
', (count(*)-CALCULATED nmiss', i,') AS nnonmiss', i,
', count(DISTINCT '|| _NAME, ') AS nuniq', i,','));
end;
call execute('1 AS kludge FROM have; quit;');
stop;
run;
data want;
set counts;
keep variable missing nonmissing unique;
array vars (*) var_name:;
array miss (*) nmiss:;
array nonmiss (*) nnonmiss:;
array uni (*) nuniq:;
do i=1 to dim(miss);
variable=vars(i);
missing=miss(i);
nonmissing=nonmiss(i);
unique=uni(i);
output;
end;
run;
Edit : added retrieval of variable names in the sql query.
... View more