如何用macro实现?
%aaa(dsin=aaa,
vars=a1 b1 c1 a2 b2 c2 a3 b3 c3,
invars=a1 b1 c1,
keepvars=no,
dsout=aaa1);
希望得到的数据集
no a1 b1 c1
1 x1 a m
1 z1 b m
1 y1 a f
2 x2 a f
2 y2 a f
3 x3 b f
我没有用宏,直接用的过程步,我想这个问题的关键是把一个观测拆分成几个观测吧。当然,你要把它改写成宏业是相当简单的啦。希望能解决您的问题。
data aaa1;
set aaa;
keep no a b c;
do;
a=a1;b=b1;c=c1;
output;
end;
do;
a=a2;b=b2;c=c2;
output;
end;
do;
a=a3;b=b3;c=c3;
output;
end;
run;
data aaa1;
set aaa1;
format b b1fmt. c c1fmt.;
if a='' then delete;
run;
为什么不以解决问题为目的呢?我稍微改了下,算是用了宏了吧。
%macro aaa(dsin=aaa,vars=a1 b1 c1 a2 b2 c2 a3 b3 c3,invars=a1 b1 c1,keepvars=no,dsout=aaa1);
data &dsout.;
set &dsin.;
keep &keepvars. a b c;
do;
a=a1;b=b1;c=c1;
output;
end;
do;
a=a2;b=b2;c=c2;
output;
end;
do;
a=a3;b=b3;c=c3;
output;
end;
run;
data &dsout.;
set &dsout.;
format b b1fmt. c c1fmt.;
if a='' then delete;
run;
%mend aaa;
%aaa;