前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在SAS的三种编码间来去自如:wlatin1,euc-cn和utf-8 【2数据集篇】

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

作者头像
SAS编程未来
修改2023-03-02 21:39:05
8040
修改2023-03-02 21:39:05
举报
文章被收录于专栏:SASSAS

上一篇,我们发现代码文件(.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. 如果多字节字符需要的字节数,在新编码下比原编码更多,则有可能产生变量长度不够用的情况。必须等比例放大所有字符型变量的长度。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档