4月 19, 2011

Posted in 分享 | 8 条评论

SAS中定义字符长度问题

前段时间翻看SASOR上的老帖子,在这个帖子ahuigeqkaiwei 讨论了下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’,作者还是又跳进陷阱了。

继续阅读
返回顶部