//FILEA DD * ←INPUTデータ
AA1BB1001
AA2BB2
AA3BB1003
AA2BB2
AA2BB4005
AA1BB1006
AA2BB4007
AA1BB1008
//SYSLIN DD *
LIST OFF
PARM LIST(NOPARM NOFILE)
FILE FILEA ←INPUTデータ定義
AAA 1 3 A HEADING('A')
BBB * 3 A HEADING('B')
CCC * 3 A HEADING('C')
*
FILE SORTFL VIRTUAL FB(80 8000) ←仮想ファイル(DDステートメント不要)
COPY FILEA
*
WKCNT W 2 P 0 VALUE 0 HEADING('DUP COUNT') MASK('ZZ9')
*
SORT FILEA TO SORTFL BEFORE(ABC) USING(AAA BBB)
ABC. PROC ←SORT前プロシージャ
IF CCC NE ' '
SELECT ←対象レコードの抽出
END-IF
END-PROC.
JOB INPUT (SORTFL KEY(AAA BBB))
IF DUPLICATE SORTFL
IF FIRST-DUP SORTFL
WKCNT = 0
END-IF
WKCNT = WKCNT + 1
PRINT REPT1
IF LAST-DUP SORTFL
PRINT REPT2
END-IF
*** ELSE
*** WKCNT = 0
END-IF
REPORT REPT1
TITLE 1 '## DETAIL LIST ##'
LINE 1 AAA BBB CCC WKCNT
*
REPORT REPT2 SUMMARY
CONTROL FINAL NOPRINT AAA NOPRINT BBB
TITLE 1 '## SUMMARY LIST ##'
LINE 1 AAA BBB WKCNT
*
/*
↓実行結果
## DETAIL LIST ##
A B C DUP COUNT
AA1 BB1 001 1
AA1 BB1 006 2
AA1 BB1 008 3
AA2 BB4 005 1
AA2 BB4 007 2
## SUMMARY LIST ##
A B DUP COUNT
AA1 BB1 3
AA2 BB4 2
|