【DFSORT/SYNCSORT】SUM FIELDS=NONE だけじゃない!重複削除と数値集計(SUM)の現場実例マスター

美しい朝焼けの都会を背景に、IT格闘じいじが自信に満ちた笑顔で、検証済みのJCL punched cardとスマホを掲げている。彼の手元からは、データの重複削除を意味する『SUM FIELDS=NONE』のデジタルダイアグラムが力強くデプロイされており、重複していたキーデータが先頭の1件に美しく集約され、緑のチェックマークが刻まれている。信頼性と技術の融合。 【技術深掘り】メインフレーム遺産
ソートキーを並び替えて『SUM FIELDS=NONE』を叩き込む。これだけで大量の重複データは綺麗にクレンジングされ、100%裏切らないスマートな一本が完成するぜ!

オス!IT格闘じいじだ。

メインフレームの現場で、大量のデータの中から「重複しているレコードを綺麗に削除したい」「特定のキーごとに売上や件数を合算したい」って場面、よくあるよな。

そんなとき、わざわざCOBOLやPL/Iで集計プログラムを1本起動してねえだろうな?

その処理、すべてソートユーティリティの「SUMカード」だけで瞬殺できるぜ!

今回は、現場で最も多用される重複削除の鉄板コマンドSUM FIELDS=NONEの正しい使い方はもちろん、メインフレーム特有のデータ形式であるパック10進数(PD)やゾーン10進数(ZD)を集計する際のリアルなアベンド(強制終了)対策までJCLサンプル付きで徹底解説する。

「ソートカードのSUMって、結局どう書くのが正解?」という若手から、日々のデータクレンジングを高速化したいベテランまで、この記事をコピペして現場の修羅場をスマートに切り抜けてくれ!

💡 じいじの警告: 「ソートの全体像や基本JCLの形をまだ見てないぜ」という奴は、まずは俺の親記事である【z/OS】プログラム不要!DFSORT/SYNCSORTでできる7大機能まとめ(JCLサンプル付き)を先に脳細胞に叩き込んできてくれよな!

■ 基本編:『SUM FIELDS=NONE』で重複レコードを瞬殺する

美しい朝焼けの都会を背景に、IT格闘じいじがスーツ姿で鋭いストレートパンチを放っている。彼の拳の先にあるデジタルの光のリングを通過することで、複数の重複したキーデータが先頭の1件に美しく集約され、検証済みのパンチカードとして出力されている。不要な重複データが格闘の衝撃で砕け散るダイアグラム。技術と破壊力の融合。
ソートキーを並び替えて『SUM FIELDS=NONE』のストレートを叩き込む。これだけで大量の重複データは一撃でクレンジングされ、100%裏切らない綺麗な1件だけがリングに残るぜ!

まずは基本中の基本、データクレンジングの最強ジャブである「重複レコードの削除」だ。

「キーが同じレコードが複数存在する場合、先頭の1件だけを残して、2件目以降の重複データをすべてゴミ箱に捨てる」という処理を、プログラムレスで実現する。

【コピペ用】重複削除のSYSIN(制御カード)サンプル

//SYSIN    DD *
  SORT FIELDS=(1,10,CH,A)
  SUM FIELDS=NONE
/*

🥊 格闘じいじのテクニカル解説

この2行のコンボが意味するのは以下の通りだ。

SORT FIELDS=(1,10,CH,A)

まず、1バイト目から10バイト分の文字(CH)をソートキーとして、昇順(A)に並び替える。SUMを使う時は、必ず先にSORT(またはMERGE)のキーを指定するのが絶対ルールだ。

SUM FIELDS=NONE:

「ソートキー(1〜10バイト目)が完全に一致するレコードが連続して現れたら、先頭の1件だけをSORTOUTに吐き出し、残りはすべて破棄せよ」という指示になる。

■ 応用編:『SUM FIELDS=(位置,長さ,フォーマット)』で数値を合計する

美しい朝焼けの都会を背景に、IT格闘じいじがスマートな表情でJCL punched cardとスマホを連携させている。彼の手元からは数値集計のアルゴリズムを意味するデジタルの光のネットワークが展開されており、同じキーを持つ複数の売上データが1つの合計値へと美しくマージされ、検証済みのスタンプと緑のチェックマークが刻まれている。緻密なロジックと技術の融合。
キーごとに数値を自動で足し算し、1件のサマリーデータへと上書きマージする。これぞSUMカードの真骨頂であり、手作業やプログラムレスで正確な集計を行うための最強のカウンターパンチだぜ!

重複を消すだけでなく、特定のキーごとに「金額」や「数量」を足し算(マージ集計)したいときに使うのが、SUMカードの真の戦闘スタイルだ。

【コピペ用】数値集計のSYSIN(制御カード)サンプル

//SYSIN    DD *
  SORT FIELDS=(1,5,CH,A)
  SUM FIELDS=(6,8,FI)
/*

🥊 格闘じいじのテクニカル解説

SORT FIELDS=(1,5,CH,A):

1バイト目から5バイト分の文字(CH/例:商品コードや拠点コード)を基準に昇順ソート。

SUM FIELDS=(6,8,FI):

ソートキー(1〜5バイト目)が同じレコードを見つけたら、6バイト目から8バイト分にある固定小数点(FI/バイナリ形式の数値)のデータを足し算して1件にまとめろ、という強力なコンボだ。

集計された結果、先頭レコードの6〜13バイト目に合計値が上書きされ、足し算に使われた2件目以降のレコードは自動的に破棄されるぜ。

■ 現場の罠:パック10進数(PD)とゾーン10進数(ZD)の集計・アベンド対策

美しい朝焼けの都会を背景に、IT格闘じいじが鋭い眼差しでJCL punched cardとスマホを構え、データの防衛体制をとっている。左側では不正なゾーン10進数データによる『S0C7アベンド(データ例外)』の赤い警告が発生しているが、じいじが展開する『事前にスペースを弾くINCLUDEガード』によってデータが完全にクレンジングされ、安全に集計された検証済みデータだけが緑のチェックマークと共に処理されているダイアグラム。修羅場をくぐったベテランの防衛策。
スペース1つでジョブを叩き落とす『S0C7アベンド』の罠。SUMカードを回す前に、じいじ直伝の『INCLUDEガード』で不正データを徹底的に間引くこと。この事前のディフェンシブガードこそが、本番システムを絶対に止めないプロの鉄則だぜ!

さあ、ここからが27年メインフレームのリングで修羅場をくぐってきた俺から、若手への一番重いアドバイスだ。

メインフレームのデータには、オープン環境で一般的な文字列(CH)やバイナリ(FI)だけでなく、「パック10進数(PD)」や「ゾーン10進数(ZD)」という特有の数値形式がゴロゴロ転がっている。

これを集計するときにガードを怠ると、一発でジョブがアベンド(強制終了)を起こしてシステムが止まるぜ!

🚨 なぜアベンドが起きるのか?(原因)

ソートユーティリティのSUMは、指定されたフォーマット(PDやZD)に基づいて、データの末尾にある「符号ビット(正か負かを示すデータ)」を厳格にチェックして足し算を行う。

もし、入力データの中にスペース(空欄)が混ざっていたり、初期化されていない不正なデータ(データ例外:S0C7など)が1件でも混ざっていると、ソートユーティリティは「数値じゃないものを足そうとした」と判断し、容赦なくジョブを叩き落とすんだ。

🛠️ 格闘じいじ直伝:アベンドを未然に防ぐ2大防衛策

現場でアベンドのカウンターを食らわないために、以下のガードを必ず固めておけ!

① 正しいフォーマット(PD/ZD)を正しく指定する

パック10進数なら PD、ゾーン10進数(外部10進数)なら ZD をSUMカードに確実に指定すること。

SUM FIELDS=(20,5,PD)

②事前にINCLUDE/OMITカードで「不正データ」を間引く

データの中にスペースやヌル値(初期化漏れ)が混入する可能性がある場合は、SUMに回す前に INCLUDE COND を使って「まともな数値データだけ」をフィルタリングするのが鉄則だ。

ゾーン10進数のスペース(X’40’)を事前に弾くコンボ例:

INCLUDE COND=(20,5,CH,NE,C'     ')
SORT FIELDS=(1,5,CH,A)
SUM FIELDS=(20,5,ZD)

(20バイト目からの5バイトがスペース「ではない」レコードだけを抽出してからソート・集計へ回す!)

■ まとめ:ソートを制する者は、メインフレーム運用を制す

美しい朝焼けの都会を背景に、スーツ姿のIT格闘じいじが黄金に輝くJCL punched cardとスマホを誇らしげに掲げ、確かな実績を感じさせる笑顔を見せている。彼の左右には、SORT/MERGE、INCLUDE/OMIT、INREC/OUTREC、SUM、OUTFIL、JOINKEYS、ICETOOLというメインフレームソートの全主要機能が、緑のチェックマークと『z/OS verified』のスタンプ付きで整理された、技術の集大成を意味するマスターダイアグラムが展開されている。27年のキャリアと技術の融合。
ソートの全機能を使いこなして初めて、メインフレーム運用のリングを完全に支配できる。100%動くコードを武器に、システムも自分自身のスキルも、最適化(自動化)のその先へ突き進もうぜ!

一社のお見送りや面接のミスマッチ(※前回の記事参照)で凹んでいる暇があったら、このソートカードを1行でも多く組んで、自分の「テクニカルな武器」を研ぎ澄まそうぜ。

正しく組んだJCLやソートカードは、100%裏切らない最強のカウンターパンチになってくれる。データ形式(PD/ZD)の特性をしっかり理解して、アベンドのリスクを未然に防ぐガードを固めること。これができて初めて「プロのメインフレーマー」だ。

次回は、データの並び順を自由自在に変えるレイアウトの達人技、「INREC / OUTRECの極意」をリアルな実例付きで深掘りしていくぜ!

次戦に向けて、スキルもシステムも自動化(最適化)していこうぜ。

Status: Batch Processing (次戦のJCL投入準備完了だ!)

関連記事:

【z/OS】プログラム不要!DFSORT/SYNCSORTでできる全機能まとめ(JCLサンプル付き)
27年のメインフレーム経験を持つIT格闘じいじが、z/OSのソートユーティリティ(DFSORT/SYNCSORT)の全機能をJCLサンプル付きで徹底網羅!並び替え、重複削除(SUM)、OUTREC、OUTFILからICETOOLの戻り値制御まで、プログラム不要の高速データ処理術を解説。
【DFSORT/SYNCSORT】カラムのズレはこれで解消!INREC/OUTRECによるデータ加工とパディングの現場実例マスター
DFSORT/SYNCSORTの「INREC/OUTREC」を徹底攻略!BUILDを使った項目の入れ替えや、現場頻出のスペース埋め(X指定)、ゼロパディング(Z指定)の具体例を解説。若手が必ずハマるINREC使用時の「ソートキー位置ズレ・アベンド」を完璧に防ぐプロの防衛策を伝授。

コメント

タイトルとURLをコピーしました