楼主: huangtiancheng
1242 3

[问答] SAS字符串提取函数substr小疑问 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

21%

还不是VIP/贵宾

-

威望
0
论坛币
5 个
通用积分
3.7020
学术水平
3 点
热心指数
3 点
信用等级
1 点
经验
231 点
帖子
70
精华
0
在线时间
131 小时
注册时间
2019-10-8
最后登录
2025-12-21

楼主
huangtiancheng 在职认证  发表于 2020-2-22 11:25:39 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
请教论坛大神,有如下程序:data;                                                                                                                                   
y=10600001;                                                                                                                             
z=substr(y,7,6);                                                                                                                        
put z=;                                                                                                                                 
run;  

z值应该是从y的第7位开始提取,往后提6位,这个怎么解释?往后没有6位了是否应该截断,为啥输出结果为z=600001  ?
二维码

扫码加我 拉你入群

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

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

关键词:SUBSTR subs UBS SUB 字符串

沙发
JERRYLINZHE 在职认证  发表于 2020-2-23 00:43:12 来自手机
学习了竟然会返回这样的值,记住就行了吧,语言也没那么多为什么
不过如果想做到不被截断,就加合条件三段长度呗

藤椅
JERRYLINZHE 在职认证  发表于 2020-2-23 00:44:17 来自手机
JERRYLINZHE 发表于 2020-2-23 00:43
学习了竟然会返回这样的值,记住就行了吧,语言也没那么多为什么
不过如果想做到不被截断,就加合条件三段长 ...
加个判断长度的条件

板凳
huangtiancheng 在职认证  发表于 2020-2-23 11:21:45
JERRYLINZHE 发表于 2020-2-23 00:43
学习了竟然会返回这样的值,记住就行了吧,语言也没那么多为什么
不过如果想做到不被截断,就加合条件三段长 ...
substr()函数是字符处理函数,其输入参数应该是字符型变量。当前例子中,给定的输入参数y是一个数值型变量。因此SAS自动的进行了变量的类型转换,将y变成了字符型变量,默认有12个字节的长度,数字右对齐,前面用空格补齐,也就是'□□□□10600001'。因此substr(y,7,6)等同于substr('□□□□10600001',7,6),得到的结果即为“600001”。

补充,若确实要对数值型的变量做截断处理,可以考虑使用cats()函数去除补齐的空格。例如:substr(cats(y),7,6)

以上为一位大神的回复,我觉得有道理。

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-29 02:58