如何在SAS的三种编码间来去自如:wlatin1,euc-cn和utf-8 【2数据集篇】

2023-03-02 21:39:05 浏览数 (2)

上一篇,我们发现代码文件(.sas)在SAS的三种编码的编辑器间,相互不兼容。那么数据集的情况如何呢?

我们生成不同编码环境下的数据集。

在wlatin1编码下,一些特殊符号,如”‰”,在界面上显示异常。但当鼠标点击进去,或者打印出来时,显示还是正常的。

多字节字符占据1字节。这里,L变量长度是10,L3变量长度是3。

在euc-cn编码下,多字节字符占据2字节。这里,L变量长度是11,L2变量长度是16.

在utf-8编码下,多字节字符占据3字节。这里L变量长度是12,L2变量是24,L3变量是8。

我们用wlatin1的编辑器,读取另外两个数据集。因为存在一些无法兼容的值,就像上方的截图,SAS报错了。这也很容易理解,我们无法使用,超过编码范围的字符。

我们用euc-cn的编辑器,读取utf-8编码的数据集(A3)时,发生了错误。跟上一个操作类似,存在无法识别的字符。

那么,我们先把UTF-8编码的数据集的特殊字符(A3.L3)变量去掉,会如何呢?结果是能够轻松导入。因为,既不存在无法识别的字符,变量中多字节字符需要的字节数也会降低,也不存在变量长度不够用的情况。

我们用utf-8的编辑器,读取euc-cn编码的数据集(A2)时,发生了错误。因为在euc-cn编码下,L变量和L2变量需要的长度分别为11和16;而在utf-8编码下,L变量和L2变量需要的长度则是12和24。变量不够长了,将会截断。

遇到这种情况,我们需要将原来数据集变量的长度,按比例放大,使用如下代码,将变量长度扩大1.5倍。然后就可以轻松调用了。

LIBNAME XXX CVP “XXX” CVPMULTIPLIER=1.5;

总结一下。跨编码环境,调用数据集文件(.sas7bdat)时需要注意两点:

  1. 原数据集中所使用的所有字符,必须都包含在新的编码体系内。
  2. 如果多字节字符需要的字节数,在新编码下比原编码更多,则有可能产生变量长度不够用的情况。必须等比例放大所有字符型变量的长度。

0 人点赞