在合并多个数据集时,会遇到同一个变量在不同数据集里数据类型不同的情况,需要修改为一致再合并。为此,写了一个宏程序,但是在执行时发现一个奇怪的问题。程序如下:
%macro attrib;
data _null_;set dsn nobs=obsnum; * 数据集dsn包含需要修改变量属性的数据集的名字, * 这些数据集有共同的变量:obs,但是属性有的是字符型,有的是数值型;
call symput('total',left(obsnum));
run;
%put &total.;
%do i=&total. %to 1 %by -1;
data _null_;set dsn;
if _n_=&i. then call symput('dsn',strip(dsn));
run;
proc contents data=&dsn. out=var(keep=name type where=(lowcase(name)="obs")) noprint;run;
data _null_;set Var;
if lowcase(name)="obs" & type=2 then call symput('obs',left(type));
run;
%if %symexist(obs) %then %do;
data &dsn.(rename=(trans_obs=obs));set &dsn.;
trans_obs=obs/1;drop obs;run;
%end;
%symdel obs/nowarn;
%end;
proc delete data=dsn var;run;
%mend attrib;
%attrib;
程序中红色部分如果修改为:%do i=1 %to &total.;则执行结果不同。反复测试也没有发现问题所在,不知道有无高手遇到过类似问题,或者能指出这个程序问题所在?
不同数据集中该变量:obs属性不同,设定为均修改为数值型变量。