SAS:将美元金额转换为十进制打包金额

时间:2018-01-08 22:51:11

标签: sql sas

我可以将十进制打包金额转换为数字金额,但无法反向执行此操作。

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;

感谢您的帮助!

2 个答案:

答案 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{
;  

enter image description here

答案 1 :(得分:1)

SAS没有制作ZDV格式,因为它没有意义,但你仍然有ZD格式:

data want;
  set have;
  amount = put(amount_dollar,zd10.);
run;

如果重要的话,这不是精确的十进制小数,而是一个分区十进制(压缩十进制,不出所料,PDw.d等)。