Jedes Byte ist vom Typ UINT(3) und kann dann mit den Werten aus beliebigen Kombinationen von 2er Potenzen 1, 2, 4, 8 , 16, 32, 64, 128 gefüllt werden.
Nun must du nur noch abzählen und die passenden Werte setzen.

dcl-ds;
v1 uint(3) inz 1;
v1 uint(3) inz 2;
v1 uint(3) inz 4;
v1 uint(3) inz 8;
v1 uint(3) inz 16;
v1 uint(3) inz 32;
v1 uint(3) inz 64;
v1 uint(3) inz 128;
v uint(3) dim(8) pos(1);
end-ds;

dcl-ds;
bytes8 char(8);
byte uint(3) dim(8) pos 1;
end-ds;

dcl-s bytepos uint(3);
dcl-s bitpos uint(3);

bytepos = %int(Bits / 8) + 1;
bitpos = %rem(Bits:8) + 1;

Byte(bytepos) += v(bitpos); // Bit setzen
Byte(bytepos) -= v(bitpo); // Bit löschen

Oder klassisch mit BITON und BITOFF bzw. %bitand() und %bitnot() => siehe Referenz.

Oder du definierst das Feld als UINT(20) => 8 Bytes und nimmst eine Tabelle mit den 64 Werten.
Um diese nicht ausrechnen zu müssen, kannst du die einer Schleife füllen:
for i=0 to 63;
v(i+1) = 2**i;
next;

Bestimmt fällt da jemandem noch was anderes kompliziertes ein.