Hello, I am attempting to extract packed decimal data from an IBM mainframe. The data as we received is not valid packed decimal but rather appears to have been translated from EBCDIC to ASCII. Is there a built-in format or function in SAS that will translate ASCII data to EBCDIC? If so, is it possible to specify the which translation table should be used? By converting the ASCII codes to EBCDIC in the ISO_1 ASCII-to-EBCDIC translation table on this page I am able to parse out the correct packed decimal data. For example, a test case I have has a true value of 84.47 (or 08447C as packed decimal). The code below creates a test file containing the true value and the data as we receive it (hex value 97 E0 40). Following the table linked above, those coordinates correspond to the true values 08 44 7C. I am looking for a method that will convert the observed hex values to the correct decimal values. I've gotten close using this combination of hex, ebcdic formats and the byte function, but upon running this converts the "97" hex value to "00" when I am looking for "08". I am looking to see if anyone knows of a simpler and correct way to do this. filename pd 'C:\pdexample.txt';
data _null_;
file 'C:\pdexample.txt';
true=84.47;
observed = 99533.44;
put true S370FPD6.2;
put observed S370FIB6.2;
run;
data testcase;
infile 'C:\pdexample.txt';
input
@1 val_Raw $6.
@1 val_FIB S370FIB6.0
;
run;
data testcase2;
set testcase;
val_Hex = put(val_FIB,$hex.);
array byte_ {4} $ B1 B2 B3 B4;
array pdconv {4} $ PD1 PD2 PD3 PD4;
do i=1 to dim(byte_);
byte_{i} = substr(val_hex,i*2-1,2);
pdconv{i} = put(put(byte(input(byte_{i},hex.)),$ebcdic.),$hex.);
end;
val_pd = cats(PD1,PD2,PD3,PD4);
if substr(val_pd,length(val_pd),1)="C" then val = substr(val_pd,1,length(val_pd)-1)/100;
if substr(val_pd,length(val_pd),1)="D" then val = substr(val_pd,1,length(val_pd)-1)/-100;
run; I hope I've made the issue evident but I am happy to clarify anything, as I am not entirely sure the best question to ask or how to ask it. Any guidance is appreciated! I am running SAS 9.4TSM6 on Windows Server 2016. Thank you, Brian
... View more