全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
4807 5
2019-07-05
小白刚开始使用,用substr截取数据的时候有个很神奇的问题:
我用substr进行单次截取的时候没问题,但运用到表中就会报错,中文截取出问题的???;
data test2;
        set pctest;
        if index(describe_text,'使用')>0 then do;
        y1=find(describe_text,'使用','i',1);
        z1=find(describe_text,'元,共','i',1);
        x1=y1+10;
        w1=z1-y1-10;
        limits1=substr(describe_text,x1,w1);
        end;
        else do;
        y1=find(describe_text,'运用','i',1);
        z1=find(describe_text,'元,共','i',1);
        x1=y1+8;
        w1=z1-y1-8;
        limits1=substr(describe_text,y1+8,z1-y1-8);
        keep id report_id describe_text y1 z1 x1 w1 limits1;
        end;
run;


而且使用正则也不会出问题,substr是为什么会报错呢?求大神指教,谢谢!
二维码

扫码加我 拉你入群

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

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

全部回复
2019-7-5 17:34:21
汉字不是标准单字节 (字母a表示一个point长度), substr 和 正则都容易出错;try   ksubstr
二维码

扫码加我 拉你入群

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

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

2019-7-8 22:34:27
比如一个汉字 ‘一’ 是占两个字节得长度,如果你用substr('一',1,1),就会出现???,原因是一这个字只取到了部分。如果你用substr('一',1,2)就可以拿到‘一’。楼上回复是正确得,用ksubstr('一',1,1)是可以得,因为ksubstr函数会忽略全角和半角,统一认为是一个长度
二维码

扫码加我 拉你入群

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

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

2019-7-11 13:58:42
lovexialulu 发表于 2019-7-5 17:34
汉字不是标准单字节 (字母a表示一个point长度), substr 和 正则都容易出错;try   ksubstr
请问用ksubstr的话用什么来配套确定位置了?因为find等都是中文算两个的
二维码

扫码加我 拉你入群

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

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

2019-7-11 14:00:50
banishurface 发表于 2019-7-8 22:34
比如一个汉字 ‘一’ 是占两个字节得长度,如果你用substr('一',1,1),就会出现???,原因是一这个字只取到 ...
我把代码单一针对报错的字段进行解析式可以的,但是到了数据表里就报错变成???了,这是为什么呢?
二维码

扫码加我 拉你入群

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

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

2019-7-13 10:34:04
xl67103289 发表于 2019-7-11 14:00
我把代码单一针对报错的字段进行解析式可以的,但是到了数据表里就报错变成???了,这是为什么呢?
大概是你用的一些其他函数也涉及到长度分割的问题。。类似函数前边都可以试试加k,就是为了解决这个问题存在的,比如 index()  scan()等
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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