我遇到的情况与此处报告的情况类似:https ://communities.sas.com/t5/New-SAS-User/Transform-integer-into-decimal/mp/918994#M41156
假设有以下数据(都是数字,而不是字符):
data have; input Hosp1 Hosp2 ; cards; 71515 42731 48041 5761 4329 481 85201 42731 85220 5119 4280 40211 2510 4280 39 22 ; run;
我想要的是以下输出:
如果我尝试使用此代码(来自 yabwon):
data want; set have; array H hosp1 hosp2; do over H; H = H/(10**max(0,ceil(log10(H))-3)); end; format hosp1 hosp2 best.; run;
输出如下:
换句话说,4280 变成了 428,但我想要 428.0 与 2510 相同。有没有办法防止它?
先感谢您
428 代表的数字和 428.0 代表的数字没有区别。
小数点后的尾随零是有意义的,那么您需要将该值存储为字符串。(请注意,无需为仅两个变量使用 ARRAY 而烦恼。)
您可以使用自定义
PICTURE
格式。例子:
日志
你想要的是字符变量,而不是数值变量;这是唯一可以完全满足您的要求的东西。
处理这个问题的方法是保留真实的数字,然后将宽度和小数长度存储在其他字段中;然后使用
put
带有这些变量的函数将最终结果存储在字符字段中。SAS 数字是浮点小数,而不是 Decimal 类型。
另一种选择是使用 DS2,它具有Decimal 类型。
https://documentation.sas.com/doc/en/vdmmlcdc/8.1/ds2pg/n0v130wmh3hmuzn1t7y5y4pgxa69.htm