Return to Archive

SAS Tip of the Month
June 2004

In the computing world there are two main character sets used for representation of characters, ASCII and EBCDIC. The most common among PCs is ASCII, but EBCDIC is used in a number of mainframe systems. For the purposes of this tip I will restrict myself to the ASCII standard character set (codes 0 to 127) - codes 32 to 126 are standard characters, while codes 0-31 and 127 are non-printable characters. The following shows the printable characters (there are tables out there on the web that gives you the full set):

   50 data _null_;
   51 do i=32 to 126;
   52 x=byte(i);
   53 put i +(-1) '=' x ' ' @;
   54 if mod(i-32+1,10)=0 then put;
   55 end;
   56 run;
   
   32= 33=! 34=" 35=# 36=$ 37=% 38=& 39=' 40=( 41=)
   42=* 43=+ 44=, 45=- 46=. 47=/ 48=0 49=1 50=2 51=3
   52=4 53=5 54=6 55=7 56=8 57=9 58=: 59=; 60=< 61==
   62=> 63=? 64=@ 65=A 66=B 67=C 68=D 69=E 70=F 71=G
   72=H 73=I 74=J 75=K 76=L 77=M 78=N 79=O 80=P 81=Q
   82=R 83=S 84=T 85=U 86=V 87=W 88=X 89=Y 90=Z 91=[
   92=\ 93=] 94=^ 95=_ 96=` 97=a 98=b 99=c 100=d 101=e
   102=f 103=g 104=h 105=i 106=j 107=k 108=l 109=m 110=n 111=o
   112=p 113=q 114=r 115=s 116=t 117=u 118=v 119=w 120=x 121=y
   122=z 123={ 124=| 125=} 126=~

Note that code 32 is a space, not a null.

In the code above, the BYTE function was used to get the character from the ASCII code, for example code 65 is 'A'.

But what if we wanted to know the reverse, that is what is the ASCII code for 'A'? In this case we would use the RANK function, as shown in the following example:

   57 data _null_;
   58 char=rank('A');
   59 put char=;
   60 run;
   
   char=65
________________________________
Updated June 1, 2004