全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3843 7
2020-07-23
各位老大,目前在尝试进行中文字符串截取的过程中,发现ksubstr如果处理那种中文、数字、符号混合在一起的字符时,会出现丢失内容或者将结果转换为乱码的情况。
data a;
length a $200. a1 a2 a3 $10.;
a="2019年08月16日07:18空腹口服导入期试验药物";
a1=ksubstr(strip(a),1,10);
a2=ksubstr(strip(a),11,10);
a3=ksubstr(strip(a),21,10);
run;

结果见截图,出现了内容丢失。

麻烦咨询一下对于这种字符串,如何进行截取。

非常感谢!
附件列表
截图.png

原图尺寸 7.28 KB

截图.png

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2020-7-23 13:30:36
data a;
length a $200. a1 a2 a3 $10.;
a="2019年08月16日07:18空腹口服导入期试验药物";
a1=ksubstr(strip(a),1,10);
a2=ksubstr(strip(a),11,10);
a3=ksubstr(strip(a),21,10);
run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-7-23 16:48:48
判断多取一位和少取一位是否相等,然后确定取到哪以及下次从哪开始。看来是为了拆分字段让字段小于200.。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-7-24 05:29:44
只要搞清ksubstr 里中文一个字算一个字节, 而length 里中文一个字算俩字节就很好理解你的结果。
a1, 从1数到10, ‘2019年08月16‘,  length 定义10个字节(汉字占俩字节), 所以变成”2019年08月“。
a2, 从11数到20,‘日07:18空腹口服’,length 定义10个字节(汉字占俩字节),“日07:18空” (9个字节, 后面的汉字”腹“占俩字节,超过10, 就咔嚓了)
a3, 从21数到30,‘导入期试验药物’,length 10, 所以取前5个汉字 ”导入期试验“。
要想得到你想要的结果,只要改length 长度即可(记住汉字占2 字节)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-7-24 10:56:19
xiaopingN 发表于 2020-7-24 05:29
只要搞清ksubstr 里中文一个字算一个字节, 而length 里中文一个字算俩字节就很好理解你的结果。
a1, 从1数 ...
对于length和ksubstr我知道它的机制,这不是新规的原因,需要对特定长度进行截取。
感谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2022-6-13 00:11:54
你好,请问解决了吗,我也遇到了同样的问题,中英文混合,不知道怎么正确截取不超过$200的
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群