2019年7月9日 星期二

SAS MACRO 初步檢查文字變數內是否有亂碼

%macro Garbled(DS=,VAR=,VARn=);
/*===================================================================
作者:JIMMY
最後修改:20190712
DS:輸入要檢查的DATASET
VAR:輸入該DATASET 內要檢查的所有文字變數      | 分隔   如: X | Y
VARn:輸入了多少個VAR
此程式會對DS的VAR進行COMPRESSKEEP英文與數字,然後與COMPRESSKEEP前的DS比對,如壓縮前後不一樣則存到WORK.VAR(變數名稱)
===================================================================*/

%do i = 1 %to  &VARn.; 
    %let VAR&i. = %qscan(%bquote(&VAR.),&i.,%str(|)); 
 data tmp_DS;
  set &DS.;
   &&VAR&i.. = compress(&&VAR&i.. ,'1234567890',"kfs");
    n=_n_;
 run;
 
 data &&VAR&i..  (keep= &&VAR&i..   compressGarbled   n);
  merge &DS.   tmp_DS  (rename=(&&VAR&i.. = compressGarbled));
  if  &&VAR&i..^=compressGarbled;
 run;

 %let open_d = %sysfunc (open( &&VAR&i.. )); 
 %let tmpds = %sysfunc(attrn(&open_d., nobs));
 %let close_d = %sysfunc(close(&open_d.));
 %if &tmpds. < 1 %then %do;
  proc datasets lib=work  mtype=(data view) nolist nowarn;
  delete &&VAR&i.. ;
  run;quit;
 %end;

%end;
proc datasets lib=work  mtype=(data view) nolist nowarn;
delete tmp_DS;
run;quit;

%mend;
%Garbled(DS=test,VAR=X | Y, VARn=2)

例子:
建立一個有亂碼的DATASET
X長度只有1,而DATALINES內有中文的話勢必會變成亂碼
data test ;
length x $ 1.  ;
input X $ ;
Y= 'A';
datalines;
a
b
1

;
run;
%Garbled(DS=test,VAR=X | Y, VARn=2)

執行後,會產生以變數名稱命名的WORK DATASET,如該變數無亂碼則該DATASET不產生(被刪除)。

Related Posts:

  • 比較兩個 SAS DATA 變數的屬性 MACRO先將兩個SAS DATA的屬性output到sit_var與uat_var,把欄位屬性變成觀測值。 如下: data DB1_DS1; length y $ 13.; input x y z; format x ddmmyy.; datalines; 1 1 1 ; run; data D… Read More
  • ERROR: Unable to transcode data to/from UCS-2 encoding.可試試此MACRO(連結) 或使用KCOUNT() 找中文 檢查長度夠不夠 以下舊文 append失敗時,可能為以下情況: 1.非NULL欄位,觀測值為NULL。 2.文字欄位長度不夠,產生亂碼。     (數值欄位也有可能,SAS大多為8,但… Read More
  • SAS Macro Meta-Analysis 統合分析 %meta_rr %meta_or %meta_rd %my_meta_norm %ForestMacro  %PubBias %macro pseudo_rsq(log_lh=, log_lh_i=, k=, obs=); proc iml; value = … Read More
  • SOURCE_CHECK_2 SAS AML 的 SOURCE_CHECK 已經有資料筆數、NULL、UNIQUE與LOOKUP的檢核了 SOURCE_CHECK_2 檢核觀測值的MACRO。 範例: data DB_A; input Pty $ score  number; datalines; A 100 … Read More
  • 偵測多個SAS LOG狀態 前半段MACRO來源:识别文件夹下指定文件类型及名称 將所有偵測LOG後的結果存入DB, 目前設定: 一、執行它時,[SAS_JOB_log]會先清空,會抓 "F:\SASWork\SAS\Config\Lev1\SASApp\BatchServer\Logs\DB_LOG\"下的LO… Read More

0 意見:

張貼留言