data test;
name = 'abcdefgh';
age = 30;
res = name || age;
run;
当我运行上面的代码时,变量 res 持有 -> abcdefgh 30
为什么数字变量 age 用空格填充,然后与字符变量连接?
data test;
name = 'abcdefgh';
age = 30;
res = name || age;
run;
当我运行上面的代码时,变量 res 持有 -> abcdefgh 30
为什么数字变量 age 用空格填充,然后与字符变量连接?
数字和字符连接时,先将数字转换为字符变量,然后将两个字符变量连接在一起。将数值变量转换为字符变量的默认格式是 BEST12。(尽管这可能会根据您的数字变量的格式而有所不同)。 put(30,BEST12.)
将产生' 30'
然后连接到字符变量。
为避免这种情况,请使用 strip 作为 Aaron 注释,或者使用 CATS ( res=cats(name,age);
) 进行连接,它会自动去除所有变量,或者自己放置数字变量(使用 PUT,如果需要,可以使用 -l 强制左对齐选项)。
试试下面的代码来连接没有空格的变量。
data test;
name = 'abcdefgh';
age = 30;
res = name || strip(age);
run;
SAS 可能很古怪。我对“为什么”的最佳猜测是 SAS 正试图使数字看起来对文本输出列表正确对齐。
您也可以使用它:
res=name || put(age,3.);
不要对数值变量使用Strip、Trim 等函数。您将在日志窗口中看到 NOTE:
注意:数字值已在 (Line):(Column) 给出的位置转换为字符值。
您曾问“为什么”它正在这样做。如果您强制 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
...
只是我的观察。希望有帮助。