首先数据集:
对上面的数据集做如下处理:
运行结果:
obs id a b b1 c d d1 e e1 f f1
1 123456 12 6 1 6 123456 7 123456 7 6 1
2 5555 12 5 1 4 5555 9 5555 9 5 1
3 321 12 1 1 3 321 10 321 10 1 1
4 1 12 1 1 1 1 12 1 12 1 1
a: id字符串长度
b: 截取id的最后一个数字
b1: 查看b的长度,b的每条记录的长度都为1
c: 对id去掉空格后查看id的长度,123456为长度为6, 5555长度为4, 321长度为3, 1的长度为1
到上面为止,跑出来的结果和预想中的是一样。
d: 对id截取id去掉空格后的长度,结果跑出来之后发现d的结果如上面所示。
一开始,我认为d是按实际储存的形式(长度为12)列了出来,可当我查看d的长度的时候,却发现并非这样,123456的长度居然是7, 5555按这样截取之后的长度居然是9.。。
突然我想是不是substr()函数的关系。。
再测试了一次
结果:
obs id a b c
1 123456 6 123456
2 5555 5 5555
3 321 1 321
4 1 1 1
这里12刚好等于id的长度,所以截取出了id的最后一位;而3小于id的长度,结果把整个id都显示出来了;而c超过了id的长度,截取出来为空。
回到数据集test2, 这里的
d=substr(id,length(compress(id,,'kd')));应该是length(compress(id,,'kd'))小于id的长度,所以全部截取出来。
可我的问题是,全部截取出来,d1应该全部都是12啊?为什么是那么奇怪的数字?
=============================
接下来,我又想是不是id本身有空格影响了截取本身。。。
所以我测试了e这个数据,使用了trim()去掉了id的空格,可结果跑出来依旧不对,长度也不对。。
问题:这里的trim()没起到作用,id的长度仍为原来的长度?
于是我想到了compress()压缩空格的方法,取了f,查看了f的长度,结果发现f和b是相同的,f1和b1是相同的,正是我想的结果。
compress()函数和trim()去空格的功能是不是在于id的长度是否变化?trim()函数使用后还是原来的变量,而compree(id,,'kd')相当于一个新变量,所以长度不同?
===========================================
我也不知道我说清楚了没有,大概问题就是上面这些。。。