当我尝试将存储为8的10位数字转换为使用put(,8。)的字符时,它给出了像1.2345e10这样的字符值。我希望字符串为1234567890.有人可以帮忙吗?
答案 0 :(得分:4)
8.
是您要使用的宽度(字符数)。所以当然是1.2345e9
;这就是它可以容纳8个字符。
x_char = put(x,10.);
要求将其放入10个字符。如果你想要它超过10,请继续扩展它。请注意,如果你对右对齐的默认对齐不满意,你可能需要使用可选的对齐选项(put(x,10. -l)
) - 长度值。
请注意,当您最初将数字描述为8.
时,我怀疑您实际上指的是length
; length不是显示大小,而是存储大小(内存中的字节数)。对于SBCS系统中的字符变量,它们是相同的,但对于数值变量length
和format
完全不相关。
答案 1 :(得分:2)
除非非常确定您的输入,否则我最好使用best.
:
data have;
x=1234567890;output;
x=12345.67890;output;
x=.1234567890;output;
x=12345678901234;output;
run;
data want;
set have;
length ten best $32;
ten=put(x,10.);
best=put(x,best32.);
run;
请注意,在这里使用10.会消除任何小数,以及更大的数字:
答案 2 :(得分:0)
SAS将数字存储为IEEE 64位浮点数。因此,当您看到变量的LENGTH
为8
时,这意味着您要存储浮点表示的完整8个字节。如果长度小于8,那么您将失去一些存储更多精度数字的能力,但是当它从数据集中提取数据以供数据步骤或proc使用时,它将始终将其转换回完整数据。位IEEE格式。
用于存储数据的LENGTH
与您应该使用多少个字符来显示人类阅读的值无关。如何显示该值由您使用的FORMAT
控制。使用什么格式取决于变量将包含的值的类型。
因此,如果您知道您的值始终为整数且最大值为9,999,999,999,那么您可以使用格式10.
(也称为F10.
)。
charvar= put(numvar,F10.);