根据基数36将数字转换为字母数字值

Tec*_*ore 5 sas

通过使用$ HEX格式,可以很容易地将数字转换为基于SAS中的基数16的字母数字值.现在我正在寻找一种简单的方法来完成基数36(10个数字和26个字母).

例子:

  • 100 - >'2s'
  • 2000 - >'1jk'
  • 30000 - >'n5c'
  • 400000 - >'8kn4'

在Java中,你可以通过Integer.toString(mynumber, 36).有任何想法如何在SAS Base中做到这一点?

Lau*_*ick 3

不幸的是,有一种简单的方法可以使用格式来完成此操作,但以下数据步骤应该可以解决问题。它仅适用于正整数。

data _null_;
 infile cards;
 input innumber;
 number = innumber;
 format base $32.;
 alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
 if number = 0 then base = '0';
 else
  do while (number ne 0);
   mod = mod(number, length(alphabet));
   div = floor(number / (length(alphabet)));
   base = cats(substr(alphabet,mod+1,1),base);
   number = div;
  end;
 put innumber= base=;
cards;
0
100
2000
30000
400000
;
run;
Run Code Online (Sandbox Code Playgroud)