或使用KCOUNT() 找中文 檢查長度夠不夠
以下舊文
append失敗時,可能為以下情況:
1.非NULL欄位,觀測值為NULL。
2.文字欄位長度不夠,產生亂碼。
(數值欄位也有可能,SAS大多為8,但如append到SQL DB就須注意)
3.亂碼。
不過可以先去檢查程式碼內是否有使用 TEST_VAR = "內有中文" ,之類的引號內有中文,
要將編碼改成 UTF-8,下圖方式即可修改編碼: 將程式碼另存選擇編碼覆蓋即可!
可使用KCOUNT() 找中文
如是資料原本身就給出亂碼的話,
可試試此MACRO(連結)
以下MACRO為一筆一筆的APPEND,看哪幾筆資料會發生ERROR,再去檢查。
%macro Debug_append(base=, data= ); %let open_d = %sysfunc (open(&data.)); %let obs = %sysfunc(attrn(&open_d., nobs)); %let close_d = %sysfunc(close(&open_d.)); %do _n = 1 %to &obs.; data _data_n&_n.; set &data.; if _n_ = &_n.; run; %put ==================================================================; %put 第 &_n. 筆觀測值異常; %put 1. 非NULL欄位 為 NULL; %put 2.文字欄位長度不夠 產生亂碼 ; %put 3.亂碼; %put ==================================================================; %let open_d = %sysfunc (open(_data_n&_n.)); %let obs2 = %sysfunc(attrn(&open_d., nobs)); %let close_d = %sysfunc(close(&open_d.)); %if &obs2. > 0 %then %do; proc append base=&base. data=_data_n&_n. force; run; %end; %end; %mend; %Debug_append(base=db_core.FSC_ENTITY_WATCH_LIST_DIM_Jimmy, data=dailprep._0304_ETLS_NEWRECORDS22222 )
0 意見:
張貼留言