国庆转眼就剩两天了,过的太快了!不知道是年纪大了觉得时间过的飞快还是怎么了,总之就是感觉眼睛一睁一闭,一天就过去了。
今天介绍一些 Special Characters在SAS中如何输出,什么是Special Characters?就像一些希腊字母或者%,¥,#,等等。注意这些都是在输出RTF或者EXCEL文件的时候才会生效,如果你直接写
data test;
a="{unicode '002A'x}"; **这个unicode对应的字符是 *;
run;
你说怎么没转换成“*”啊,注意,你用引号括起来,SAS只会把他当作一个文本,你写成什么样,SAS数据集只是保留原样。
一:想必大家可能都遇到下面这个错误:
ERROR: Some character data was lost during transcoding in the dataset DB.LABS. Either the data contains characters that are not representable in the new encoding or truncation occurred during transcoding.
原因可能是你在中文服务器环境下跑英文编码的文件,也有可能是文件中的一些特殊字符在转换的时候发生错误,或者是其他一些原因:大家不妨试一下下面这种方法,具体能不能解决问题我还不知道,毕竟最近没遇到这个问题。
data temp;
set XXX (encoding='asciiany');
run;
二:查看对应特殊字符的编码
大家可以通过下面这种方式(byte)查看数字对应的特殊字符输出。
data _null_;
do k=1 to 255;
x=byte(k);
put k +10 x;
end;
run;
获得到对应的字符:
这时候你就可以直接通过data步获得到特殊字符,但是不知道是什么原因,有些特殊字符没显示,不知道是不是数字超出了范围,还是说其他一些原因。
三:ods输出报表,利用unicode编码输出特殊字符。
有时候我们输出rtf等文件,尤其是处理LB相关的table和listing,经常会遇到百分号(%),但是这个符号特殊在SAS可能把它后面跟着的内容当作是宏引用,但是不是宏啊,所以就总是报错。
除了用%nrstr让SAS不去解析这个百分号,亦可以用第二种方法,也就是byte,像下面这样,就不用忍受遇到 % SAS总是报错了。
还可以利用unicode编码输出百分号。(数据集中没用,文章刚开始讲了,看下面的例子:(来自SAS官网)
%对应的unicode编码是0025,这个你可以直接百度搜索unicode编码表,对应输出的数据集
对应输出的report,可以看到l列并没有被解析,但是label列被解析了,所以应该就是这个(*ESC*)的作用。大家也可以创建一个宏变量代替这个unicode编码,比如 %let cc=(*ESC*){unicode '2193'x},到时候直接引用宏变量&cc就好了.
SAS官网也说了:
想详细了解的可以直接在SAS官网搜索“Special Characters”.
*********************************************
这几天过的真的不开心,感觉自己有点抑郁了。不开心,难受!
网友评论