data test;
name = 'abcdefgh';
age = 30;
res = name || age;
run;
当我运行上面的代码时,变量res保持 - > abcdefgh 30
为什么数字变量age用空格填充然后与字符变量连接?
答案 0 :(得分:8)
当数字和字符连接在一起时,首先将数字转换为字符变量,然后将两个字符变量连接在一起。将数字变量转换为字符变量的默认格式为BEST12。 (尽管根据数值变量的格式可能会有所不同)。 put(30,BEST12.)
会产生' 30'
,然后将其连接到字符变量。
为了避免这种情况,要么使用strip作为Aaron注释,要么使用CATS(res=cats(name,age);
)进行连接,它会自动删除所有变量,或者自己放置数值变量(并且使用PUT,你可以强制左对齐)如果你想使用-l选项,那就好了。
答案 1 :(得分:2)
尝试使用以下代码连接没有空格的变量。
data test;
name = 'abcdefgh';
age = 30;
res = name || strip(age);
run;
SAS可能很古怪。我最好的猜测是“为什么”是SAS试图使数字看起来对文本输出列表是正确的。
答案 2 :(得分:0)
你也可以使用它:
res=name || put(age,3.);
不要为数字变量使用 Strip,Trim等函数。您将在日志窗口中收到NOTE:
注意:数值已在(Line):( Column)给出的位置转换为字符值。
答案 3 :(得分:0)
你曾问过“为什么”这样做。如果您强制SAS没有按照其他人在此处提到的好方法来定义它,那么当一个变量被定义为字符串而另一个变量是数字时,您可能会遇到排序问题。 示例:
VAR3 = VAR1 || VAR2;
VAR4 = VAR1 || PUT(VAR2,2.);
VAR1 VAR2 VAR3 VAR4
DOG 1 DOG 1 DOG1
DOG 2 DOG 2 DOG2
... ... ... ...
DOG 11 DOG11 DOG11
如果你对VAR3
进行排序,你会得到你想要的......
如果您对VAR4
进行排序,则可获得DOG1
,DOG11
,DOG2
...
只是我的观察。希望有所帮助。