在开始项目编程之前,一般都要为SAS选择服务器,一般有两种:一种是英文服务器,另一种是中文服务器。如果选择错了,那么在打开数据集的时候,会出现乱码。
那么是选择英文的还是中文的呢?一般我们根据raw.dm这个数据集判断。(可能每个公司存放原始数据集的库名不一样)。dm这个数据集是直接从DM部门那边发过来的,并不是我们处理过后写的DM域输出的数据集。
换句话说就是查看数据集的编码,一般我们可以通过proc contents查看
proc contents data=raw.dm;
run;
可以看到数据集的编码采用的utf-8形式,也就是英文服务器。
然后今天在看《深入解析SAS》这本书的时候,又学到了一种查看编码的方法,就是用attrc函数。
%let dsid=%sysfunc(open(raw.dm,i));
%put %sysfunc(attrc(&dsid,encoding));
一开始我以为"i"这个参数是不区分大小写的意思,可是在SAShelp文档搜索attrc函数的时候,顺便看了一下open函数,才知道这个"i"的意思是“以INPUT模式(默认)打开数据集。值可以读取,但不能修改。“I”使用引擎中最强的访问模式,也就是说,如果引擎支持随机访问,OPEN默认为随机访问。否则,文件将自动以“in”模式打开。以顺序访问方式打开文件,并设置系统级警告。”(来自SAShelp文档)
open函数的作用是打开一个数据集,至于为什么要打开,我目前在网上还没看到,也没特别去搜。
接下来具体介绍attrc函数,根据SAShelp文档解释:
语法格式是:
ATTRC(data-set-id,attribute-name)
data-set-id:指定OPEN函数返回的数据集标识符。(讲的有点抽象)
attribute-name:有下面这些选项,具体可看SAShelp文档。
看一个具体的例子:
data cc;
dsid=open("sashelp.classfit", "i");
charset=attrc(dsid, "CHARSET");
if charset = "" then
put "Data set has not been sorted.";
else put "Data set sorted with " charset
"character set.";
rc=close(dsid);
run;
同时可以看到数据集中各变量返回的值。
CHARSET这个参数就是判断数据集中的字符是由什么编码组成的,
charset=attrc(dsid, "CHARSET");这句话的作用就是通过attrc函数将得到的值赋给charset,然后才有下面那段判断是否为空的句子。
总结:proc contents较常用,attrc函数就当拓展知识面。