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

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

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

4

4 回答 4

8

数字和字符连接时,先将数字转换为字符变量,然后将两个字符变量连接在一起。将数值变量转换为字符变量的默认格式是 BEST12。(尽管这可能会根据您的数字变量的格式而有所不同)。 put(30,BEST12.)将产生'          30'然后连接到字符变量。

为避免这种情况,请使用 strip 作为 Aaron 注释,或者使用 CATS ( res=cats(name,age);) 进行连接,它会自动去除所有变量,或者自己放置数字变量(使用 PUT,如果需要,可以使用 -l 强制左对齐选项)。

于 2013-01-10T15:50:04.927 回答
2

试试下面的代码来连接没有空格的变量。

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

SAS 可能很古怪。我对“为什么”的最佳猜测是 SAS 正试图使数字看起来对文本输出列表正确对齐。

于 2013-01-10T15:41:00.573 回答
0

您也可以使用它:

res=name || put(age,3.);

不要对数值变量使用Strip、Trim 等函数。您将在日志窗口中看到 NOTE:

注意:数字值已在 (Line):(Column) 给出的位置转换为字符值。

于 2015-07-15T07:06:18.143 回答
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...

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

于 2015-08-10T15:55:23.753 回答