RAVE系統(tǒng)將原始數(shù)據(jù)導出SAS數(shù)據(jù)集時猾愿,如果原始數(shù)據(jù)編碼不符合當前SAS數(shù)據(jù)集編碼鹦聪,會出現(xiàn)亂碼現(xiàn)象。與DM溝通這個問題時蒂秘,DM反饋系統(tǒng)內(nèi)數(shù)據(jù)顯示都正常泽本。最終,我們采取的方法是姻僧,將存在亂碼的每一個變量值進行匯總规丽,讓DM對照匯總表格,刪除或重新輸入亂碼部分撇贺。
這個過程涉及對每一個原始數(shù)據(jù)集中的每一個字符變量進行條件判斷赌莺,常規(guī)的處理方法是,對數(shù)據(jù)集與數(shù)據(jù)集變量這兩個維度進行宏循環(huán)處理松嘶。不過艘狭,這個方法有一個弊端:雙層嵌套宏循環(huán)的運行速度會非常慢。
為解決這個問題,組員Lotte采用數(shù)組循環(huán)來處理變量維度巢音。這個做法遵倦,大大加快程序運行速度,同時也方便應用到變量的其它條件判斷官撼,值得借鑒梧躺!
程序主要部分處理如下:
%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;
感謝閱讀,歡迎關(guān)注:SAS茶談傲绣!
若有疑問掠哥,歡迎評論交流!