将数字与字符连接起来

时间:2013-01-10 15:34:56

标签: sas

data test;
name = 'abcdefgh';
age = 30;
res = name || age;
run;

当我运行上面的代码时,变量res保持 - > abcdefgh 30

为什么数字变量age用空格填充然后与字符变量连接?

4 个答案:

答案 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进行排序,则可获得DOG1DOG11DOG2 ...

只是我的观察。希望有所帮助。