SAS數(shù)據(jù)集編碼轉(zhuǎn)化

在工作中經(jīng)常會遇到SAS數(shù)據(jù)集或外部導(dǎo)入文件亂碼的問題,導(dǎo)致亂碼的原因基本都是因為字符編碼的問題,今天我們說一下如何查看SAS系統(tǒng)和SAS數(shù)據(jù)集的編碼及編碼轉(zhuǎn)換的問題。
SAS EG中可以通過在服務(wù)器選項上鼠標(biāo)右鍵選擇屬性查看服務(wù)器的編碼設(shè)置。
253077-1.png
數(shù)據(jù)集的編碼可以通過PROC CONTENTS過程步查看,代碼和結(jié)果如下:
data class;
  set sashelp.class;
run;
proc contents data=class;
run;
253077-2.png
SAS編碼是通過啟動時加載配置文件決定的,啟動后無法修改,如果嘗試通過下面命令設(shè)置,會被系統(tǒng)忽略。
option encoding='utf-8';
253077-3.png

因此在導(dǎo)入、導(dǎo)出的時候,我們可以指定導(dǎo)入文件或者導(dǎo)出文件的編碼。
比如,要導(dǎo)入的csv文件為utf-8,變量為中文,代碼如下:
options validvarname=any;
FILENAME nls "X:\job\test1.csv" ENCODING="utf-8";
PROC IMPORT OUT= WORK.TEST2
            DATAFILE= nls
            DBMS=CSV REPLACE;
     GETNAMES=YES;
     DATAROW=2;
RUN;
對應(yīng)的UTF-8編碼文件輸出:
FILENAME export "X:\job\test2.csv" ENCODING="utf-8";
PROC EXPORT DATA= TEST2
            OUTFILE= export
            DBMS=csv REPLACE;
RUN;
如不指定編碼,SAS會默認(rèn)導(dǎo)出和導(dǎo)出的文件編碼同自身默認(rèn)的編碼一致。另外我們可以對SAS數(shù)據(jù)庫指定編碼。比如轉(zhuǎn)換SAS dataset的編碼:
*轉(zhuǎn)換整個目錄;
libname inlib cvp 'c:\temp';
libname outlib 'c:\' outencoding='UTF-8';
proc copy noclone in=inlib out=outlib;
run;
*轉(zhuǎn)換指定數(shù)據(jù)庫
libname inlib cvp 'c:\temp';
libname outlib 'c:\' outencoding='UTF-8';
proc copy noclone in=inlib out=outlib;
  select dataset_name;
run;




請前往:http://lygongshang.com/TeacherV2.html?id=166