请教sas大侠们:
问题:我在对d_200501数据集做缺失值赋值的code如下:
data mylib.d_200501;set mylib.d_200501;
array arr1 _numeric_;do over arr1; if missing(arr1) then arr1=-9999;end;
array arr2 _character_;do over arr2; if missing(arr2) then arr2=.M;end;
run;
或者:(列出变量名)
data mylib.d_200501;
set mylib.d_200501;
array A{2}
MOB_recent_loan
tot_pmt_amt;
do i=1 to 2;
if(A{i}=.)then A{i}=-9999;
array A{2}
closed_dt1
lmn;
do i=1to 2;
if(A{i}=' ')then A{i}='M';
end;
run;
这两个都是没有问题的,可是我想用宏代码把他们编写出来就不行了。code和log如下:
%macro fuzhi(set);
data &set;
set &set;
array A _numeric_;
%do over A;
%if missing(A)%then A=-9999;
%end;
array B _char_;
%do over B;
%if missing(B)%then B="M";
%end;
run;
%mend fuzhi;
%fuzhi(mylib.d_200501);
错误代码如下:122 %macro fuzhi(set);
123 data &set;
124 set &set;
125 array A _numeric_;
126 %do over A;
ERROR: An unexpected semicolon occurred in the %DO statement. A dummy macro will be compiled.
127 %if missing(A)%then A=-9999;
128 %end;
129 array B _char_;
130 %do over B;
ERROR: An unexpected semicolon occurred in the %DO statement. A dummy macro will be compiled.
131 %if missing(B)%then B="M";
132 %end;
133 run;
134 %mend fuzhi;
在宏当中,array这个关键词是没法用的,应该是这个原因,可是我不知道该如何用可以循环的语句来实现这个过程。不列出变量名的那种?因为有的数据集的变量很多!