RAVE系统将原始数据导出SAS数据集时,如果原始数据编码不符合当前SAS数据集编码,会出现乱码现象。与DM沟通这个问题时,DM反馈系统内数据显示都正常。最终,我们采取的方法是,将存在乱码的每一个变量值进行汇总,让DM对照汇总表格,删除或重新输入乱码部分。
这个过程涉及对每一个原始数据集中的每一个字符变量进行条件判断,常规的处理方法是,对数据集与数据集变量这两个维度进行宏循环处理。不过,这个方法有一个弊端:双层嵌套宏循环的运行速度会非常慢。
为解决这个问题,组员Lotte采用数组循环来处理变量维度。这个做法,大大加快程序运行速度,同时也方便应用到变量的其它条件判断,值得借鉴!
程序主要部分处理如下:
%macro check_special_cahr(lib=);
data vtable;
set sashelp.vtable;
where libname=%upcase("&lib.");
run;
proc sql noprint;
select count(memname) into:num trimmed /*Number of datasets*/
from vtable
;
select memname into:dt1 - :dt&num /*Names of datasets*/
from vtable
;
quit;
%do i = 1 %to #
data _var_&i.;
length dataset special_char_var $50 special_char_value $2000;
set &database..&&dt&i.;
dataset="&&dt&i.";
array c_var(*) $2000 _character_;
do k = 1 to dim(c_var);
special_char_var = vname(c_var(k));
if index(c_var(k),"¿") then do;
special_char_value = cats(c_var(k));
output;
end;
end;
run;
%end;
data check_res;
set _var_:;
run;
%mend check_special_cahr;
感谢阅读,欢迎关注:SAS茶谈!
若有疑问,欢迎评论交流!