%SIZE(variable)
%SIZE(literal)
%SIZE(array{:*ALL})
%SIZE(table{:*ALL})
%SIZE(multiple occurrence data structure{:*ALL})
%SIZE は定数またはフィールドが占めているバイト数を戻します。 この引数は、リテラル、名前付き定数、データ構造、データ構造サブフィー ルド、フィールド、配列、またはテーブル名とすることができます。 式を含めることはできませんが、一部の定数値組み込み関数および定数式は受け入れられます。 戻り値は符号なし整数形式 (タイプ U) です。
図形リテラルの場合は、サイズは、先行および後書きのシフト文字を含まない図形 文字によって占められるバイト数です。 16 進数リテラル または UCS-2 リテラルの場合、戻されるサイズは、そのリテラル内 の 16 進数の桁数の半分です。
可変長フィールドの場合、%SIZE は フィールドによって占有されている 合計バイト数 (宣言された最大長より 2 バイト長い) を戻します。
ヌル値可能フィールドで戻される長さ (%SIZE) は、そのヌル標識の設定値とは 無関係に、常に全体の長さです。
引数が配列名、テーブル名、または複数オカレンス・データ構造名であった場合には、戻り値は 1 つの要素またはオカレンスのサイズです。%SIZE の 2 番目のパラメーターとして *ALL が指定された場合には、戻り値 はすべての要素またはオカレンスが占める記憶域となります。 ポインター・サブフィールドを含む複数オカレンス・データ構造の場合には、そのサイズ が 1 つのオカレンスにオカレンス数を乗じたサイズより大きくなることがあります。 システムではポインターを 16 で割り切れるアドレスで記憶域に入れる必要があ るからです。 結果として、すべてのオカレンスについてポインター・サブフィールドを記憶域内で正 しく位置決めできるように、各オカレンスの長さが正確に 16 バイトの倍数となるよう に増やさなければならないことがあります。 より大きな配列にオーバーレイされたために、配列が不連続になっている場合、戻される値は、配列が連続している場合に戻される値と同じになります。 その値には、不連続配列の要素間の記憶域は含まれません。
複合修飾名を引数に使用することはできません。
複合修飾サブフィールドのサイズを知りたい場合は、必要なサブフィールドを
含んでいるデータ構造サブフィールドを定義する LIKEDS キーワードに使用されているデータ構造を
指定します。
例えば、INFO.CUST.NAME のサイズを知りたい場合、
データ構造 INFO の CUST サブフィールドが
キーワード LIKEDS(CUST_T) で定義されているとすると、%SIZE(CUST_T.NAME) と指定します。 
%SIZE は、定義仕様書で使用できる数値定数および演算仕様書の拡張演算項目 2 フィールドの式のどこにでも指定することができます。
詳細については、サイズ変更命令または 組み込み関数を参照してください。
*..1....+....2....+....3....+....4....+....5....+....6....+....7....+....
D*Name++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++
D arr1 S 10 DIM(4)
D table1 S 5 DIM(20)
D field1 S 10
D field2 S 9B 0
D field3 S 5P 2
D num S 5P 0
D mds DS 20 occurs(10)
D mds_size C const (%size (mds: *all))
D mds_ptr DS 20 OCCURS(10)
D pointer *
D vCity S 40A VARYING INZ('North York')
D fCity S 40A INZ('North York')
/FREE
num = %SIZE(field1); // 10
num = %SIZE('HH'); // 2
num = %SIZE(123.4); // 4
num = %SIZE(-03.00); // 4
num = %SIZE(arr1); // 10
num = %SIZE(arr1:*ALL); // 40
num = %SIZE(table1); // 5
num = %SIZE(table1:*ALL); // 100
num = %SIZE(mds); // 20
num = %SIZE(mds:*ALL); // 200
num = %SIZE(mds_ptr); // 20
num = %SIZE(mds_ptr:*ALL); // 320
num = %SIZE(field2); // 4
num = %SIZE(field3); // 3
n1 = %SIZE(vCity); // 42
n2 = %SIZE(fCity); // 40
/END-FREE