SAS数据集编码转化

在工作中经常会遇到SAS数据集或外部导入文件乱码的问题,导致乱码的原因基本都是因为字符编码的问题,今天我们说一下如何查看SAS系统和SAS数据集的编码及编码转换的问题。
SAS EG中可以通过在服务器选项上鼠标右键选择属性查看服务器的编码设置。
253077-1.png
数据集的编码可以通过PROC CONTENTS过程步查看,代码和结果如下:
data class;
  set sashelp.class;
run;
proc contents data=class;
run;
253077-2.png
SAS编码是通过启动时加载配置文件决定的,启动后无法修改,如果尝试通过下面命令设置,会被系统忽略。
option encoding='utf-8';
253077-3.png

因此在导入、导出的时候,我们可以指定导入文件或者导出文件的编码。
比如,要导入的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;
对应的UTF-8编码文件输出:
FILENAME export "X:\job\test2.csv" ENCODING="utf-8";
PROC EXPORT DATA= TEST2
            OUTFILE= export
            DBMS=csv REPLACE;
RUN;
如不指定编码,SAS会默认导出和导出的文件编码同自身默认的编码一致。另外我们可以对SAS数据库指定编码。比如转换SAS dataset的编码:
*转换整个目录;
libname inlib cvp 'c:\temp';
libname outlib 'c:\' outencoding='UTF-8';
proc copy noclone in=inlib out=outlib;
run;
*转换指定数据库
libname inlib cvp 'c:\temp';
libname outlib 'c:\' outencoding='UTF-8';
proc copy noclone in=inlib out=outlib;
  select dataset_name;
run;




请前往:http://www.mark-to-win.com/TeacherV2.html?id=166