我可以将十进制打包金额转换为数字金额,但无法反向执行此操作。
regions
那是 -
data HAVE;
amount = '00000258Q';output;
amount = '000000000';output;
amount = '00002488M';output;
amount = '00002126P';output;
amount = '000007{ ';output;
run;
data WANT;
set HAVE;
amount_dollar = input(cats(amount),zdv10.);
run;
感谢您的帮助!
答案 0 :(得分:2)
您的上一个值比其他值短,这就是您需要添加cats()
函数(或trim()
或strip()
函数)以从中删除尾随空白的原因你传递给ZDV.
信息。实际上你的其他值实际上只有9个字符而不是10.你的所有零值将被ZDV.
信息转换为缺失,但是ZD.
信息将被转换为零,因为它并不介意带符号的半字节是0。
使用ZD.
格式生成分区十进制字符串,但请注意,它会将前导零添加到最后一个值,并将半字节符号设置为全零值。
data test;
input original $9. ;
num=input(original,zd9.);
numv=input(original,zdv9.);
numt=input(trim(original),zd9.);
string=put(numt,zd9.);
same = string=original;
cards;
00000258Q
000000000
00002488M
00002126P
000007{
;
答案 1 :(得分:1)
SAS没有制作ZDV格式,因为它没有意义,但你仍然有ZD格式:
data want;
set have;
amount = put(amount_dollar,zd10.);
run;
如果重要的话,这不是精确的十进制小数,而是一个分区十进制(压缩十进制,不出所料,PDw.d等)。