SAS 数据集编码转换

今天偶然遇到了一个euc-cn格式的数据集,在对数据集进行处理的时候报错,错误信息如下:

ERROR: Some character data was lost during transcoding in the data set LIB.DS3. Either the data contains characters that are not representable in the new encoding or truncation occurred during transcoding.

在网上寻求帮助的同时看到了这篇公众号如何在SAS的三种编码间来去自如:wlatin1,euc-cn和utf-8

这里面详细介绍了各种编码之间的区别,里面提到了一种批量解决的方法,即:将sas文件导入(infile+input),再导出成新编码下的.sas文件(file+put)。

我在这里想把这种方法具体化一下~详情也可参考如下链接15597 - How to convert SAS® data set encoding

转换整个逻辑库中数据集的编码

/*转换为UTF-8的编码类型*/
libname inlib cvp 'c:\temp'; 
libname outlib 'c:\' outencoding='UTF-8'; 
proc copy noclone in=inlib out=outlib; 
run;

转换单个数据集的编码

/*转换为UTF-8的编码类型*/
libname inlib cvp 'c:\temp';
libname outlib 'c:\' outencoding='UTF-8';
proc copy noclone in=inlib out=outlib;
select data_set_name;
run;

为了确定当前数据集的编码,可以在SASHELP.VTABLE中找到这个你想要确认编码的数据集,查看它对应的ENCODING变量;也可以通过下面的代码将把数据集的编码和当前SAS会话编码写入日志:

%let dsn=libref.datasetname;
%let dsid=%sysfunc(open(&dsn,i));
%let encoding=%sysfunc(attrc(&dsid,encoding)).;
%let rc=%sysfunc(close(&dsid));
%put The encoding for data set &dsn is: &encoding.;
%put The SAS session encoding is: &sysencoding.;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值