data a;
infile datalines dsd;
input id $ var1 var2 var3$ ;
datalines;
001,1,,
001,,2,
001,,,a
002,4,,
002,,5,
002,,,6
;
run;
%macro test(num);
data work.b#
set work.a(keep= id var&num);
if vtype(var&num) = "N"then do;
if var&num ne . then output;
end;
else do;
if var&num ne '' then output;
end;
run;
%mend;
%test(1)
%test(2)
%test(3)
data work.c;
merge work.b1 work.b2 work.b3;
byid;
run;
proc print ;
run;
id
var1
var2
var3
001
1
001
2
001
a
002
4
002
5
002
b
||
id
var1
var2
var3
001
1
2
a
002
4
5
b
村花大神SQL代码:
data a;
infile datalines dsd;
input id $ var1 var2 var3$ ;
datalines;
001,1,,
001,,2,
001,,,a
002,4,,
002,,5,
002,,,6
;
run;
proc sql noprint;
selectcount(*) into: numn from dictionary.columns
where libname='WORK'AND MEMNAME='A'AND TYPE='num';select name into: clist sepearted by','from dictionary.columns
where libname='WORK'AND MEMNAME='A'AND TYPE='char'and name ne 'id';
quit;
data b;
format k $20.;
set a;
array va _numeric_;
array vara $ new1-new%left(&numn.);
do i=1to &numn.;
vara[i]=put(va[i],8.0);
end;
k=coalescec(of vara{*},&clist.);
run;
proc transpose data=b out=c(drop=_name_);
by id;
var k;
run;
proc print;
run;