在RTF上输出特殊字符

本文详细介绍了在SAS编程中如何使用上、下角标,以及如何通过Unicode编码处理特殊字符。示例展示了如何在报告定义中插入上、下角标,如BMI(kg/m²)和T_max,以及如何删除字符串中的不可见字符,如换行符。同时,文章还探讨了在字符串中正确显示%和&的方法,利用raw和odsescapechar属性处理宏程序和宏变量的引用问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文默认:ods escapechar="^";

一、上下角标——super/sub

上角标举例:“BMI(kg/m^{super 2})”         “体重指数^{super *}”

下角标举例:"T^{sub max}"         "AUC^{sub 0-t}"

ods escapechar="^";
data rep1;
    item = "S01001^{super *}";
    col1 = 2.528;
    col2 = 163.725;
run;
proc report data=rep1 nowindows headline headskip spacing=0;
    column item col1-col2;
    define item / display flow " 受试者";
    define col1 / display flow " T^{sub max}";
    define col2 / display flow " C^{sub max}" ;
run;

二、其他特殊字符——unicode

unicode其实是一种编码,是为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。与ASCII编码不同,unicode编码通常是2个字节。

特殊符号与Unicode的对应关系可以在这个链接上查询

Unicode – 文本和表情符号的世界标准

Unicode - Compart

ods escapechar="^";
data rep1;
    item="S01001^{unicode 26}S01002";/*添加一个&(unicode 十六进制=26)*/
    col1 = 2.528;
    col2 = 163.725;
run;
ods rtf file="&outputpath.example1.rtf";
proc report data=rep1 nowindows headline headskip spacing=0;
    column item col1-col2;
    define item / display flow " 受试者";
    define col1 / display flow " T^{sub m^{unicode 61}x}";/*还可以嵌套使用;字母a(unicode 十六进制=61)*/
    define col2 / display flow " C^{sub max}" ;
run;
ods rtf close;

unicode 还可用于删除特殊字符:

在判断两个字符串是否相等时,明明肉眼看着就是一模一样,但是代码运行结果显示却是不一样的。这个时候我们就要考虑,字符串中是否有一些“不可见”的字符,比如换行符、制表符tab、软回车等等。因为他们在SAS 的Output Data中属于不可见字符。

下面用换行符(控制字符)来举例:

data rep1;
    length type str $200;

    type = "无特殊字符";
    str  = "我是一名程序员";
    klength=klength(str);
    output;

    type = "包含特殊字符";
    str  = "我是一名程序员"||byte(10);  /*换行符的unicode,十进制=10,十六进制=0a*/
    klength=klength(str);
    output;

    type = "删除特殊字符";    
    str  = compress(str,'0a'x);        /*换行符的unicode,十进制=10,十六进制=0a*/
    klength=klength(str);
    output;
run;

判断字符串长度是否与已知长度相等:正常情况下,klength(str1)的值应该是7,如果结果大于7,则说明有“不可见”的字符。(length同理,因为用中文举例所以直接使用klength)

利用unicode删除字符串中的特殊字符:compress(str1,'0a'x); 或者 tranwrd(str1,'0a'x," ");

三、其他特殊符号——raw

%、&在字符串中有其特定的含义,分别代表引用宏程序、引用宏变量。

还有转义字符,即ods escapechar="^";   在我的环境下是^。

当我想要在字符串中正常显示%、&、escapechar时可以使用raw。

ods escapechar="^";
%let n1=10;
%let n2=8;
data rep1;
    item = "S01001";
    col1 = 0.81;
    col2 = 0.72;
run;
proc report data=rep1 nowindows headline headskip spacing=0;
    column item col1-col2;
    define item / display flow " 受试者";
    define col1 / display flow " 受试制剂(0.05%剂量) N=n1";/*这种写法会报错*/
    define col2 / display flow " 受试制剂(0.15%剂量) N=n2";/*这种写法会报错*/
run;

如果不加处理,直接这样写,会报错说找不到名为“剂量”的宏程序

ods escapechar="^";
%let n1=10;
%let n2=8;

data rep1;
    item = "S01001";
    col1 = 0.81;
    col2 = 0.72;
run;
ods rtf file="&outputpath.example1.rtf";
proc report data=rep1 nowindows headline headskip spacing=0;
    column item col1-col2;
    define item / display flow " 受试者";
    define col1 / display flow " 受试制剂(0.05^{raw %}剂量) N=&n1";
    define col2 / display flow " 受试制剂(0.15^{raw %}剂量) N=&n2";
run;
ods rtf close;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Miya_o00

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值