4月 19, 2011
SAS中定义字符长度问题
前段时间翻看SASOR上的老帖子,在这个帖子中 ahuige 和 qkaiwei 讨论了下SAS中定义字符长度的问题,觉得挺有意思也挺有用处,摘录如下:
ahuige
1.第一个讨厌的特性,变量按第一次赋值决定变量的长度。
1 2 3 4 5 data xx; x='ab'; x='ab'||'c'; put x=; run;以上的语句,在log窗中可以看到,x的值依然是’ab’;这会让一个使用过其他语言写过这种天经地义的正确写法但又在sas中得到这种结果的人不知所措
ahuige
继续阅读然后现在会有sas的卫道者跳出来说,这有什么,一个变量应该先定义长度,然后再赋值。下面的方法可以解决这个问题
1 2 3 4 5 6 data xx; length x$8.;*这里加一个定义长度; x='ab'; x='ab'||'c'; put x=; run;这个问题的确解决了,log窗里可以看到这里x=’abc’
好,现在初学者认为他已经了解了解决这个问题的方法。但是,下面的pitfall又来了。
1 2 3 4 5 6 data xx; length x$8; x='ab'; x='x||'c'; put x=; run;作者的本意是想得到x=’abc’,但是log里面又显示的是x=’ab’,作者还是又跳进陷阱了。