楼主: xl67103289
4912 5

[问答] SAS中substr的问题 [推广有奖]

  • 0关注
  • 0粉丝

VIP1

初中生

4%

还不是VIP/贵宾

-

威望
0
论坛币
3674 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
55 点
帖子
6
精华
0
在线时间
20 小时
注册时间
2012-9-3
最后登录
2019-7-15

楼主
xl67103289 发表于 2019-7-5 11:41:47 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
小白刚开始使用,用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是为什么会报错呢?求大神指教,谢谢!
二维码

扫码加我 拉你入群

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

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

关键词:SUBSTR subs SUB UBS describe

沙发
lovexialulu 发表于 2019-7-5 17:34:21
汉字不是标准单字节 (字母a表示一个point长度), substr 和 正则都容易出错;try   ksubstr
已有 1 人评分论坛币 收起 理由
admin_kefu + 20 精彩帖子

总评分: 论坛币 + 20   查看全部评分

藤椅
banishurface 学生认证  发表于 2019-7-8 22:34:27
比如一个汉字 ‘一’ 是占两个字节得长度,如果你用substr('一',1,1),就会出现???,原因是一这个字只取到了部分。如果你用substr('一',1,2)就可以拿到‘一’。楼上回复是正确得,用ksubstr('一',1,1)是可以得,因为ksubstr函数会忽略全角和半角,统一认为是一个长度
已有 2 人评分论坛币 热心指数 收起 理由
eijuhz + 3 精彩帖子
admin_kefu + 20 精彩帖子

总评分: 论坛币 + 20  热心指数 + 3   查看全部评分

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

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

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

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-8 17:31