Im Gegensatz zu RPG unterscheidet COBOL zwischen Input- und Output-Formaten.
D.h., beim Read gibt es nur Input-Felder und ggf. INxx, beim Write nur Output-Felder, wobei ein Input- auch ein Output-Feld sein kann.
Wenn du dir die Definition des DDS-ALL-Formats ansiehst, kannst du jede Menge Redefinitionen der unterschiedlichen Formate entdecken.
Programm-Übergabefeld sind, wie der Name schon sagt, eben nur Ausgabefelder und fehlen daher bei der Eingabe.

I.d.R. legt man sich daher in der WORKING-Storage Section je Input- und Output einzelne Satzstrukturen an, so dass man per READ ... INTO und WRITE .... FROM ganz genau unterscheiden kann.
Da COBOL nun mal tippintensiv ist, erhöht sich da etwas der Aufwand:

w-s section.
01 Formate.
copy dds-format-i of dspfile
copy dds-format-o of dspfile

read dspfile into format-i format is "FORMAT"
move corr format-i to format-o
write dsprecord from format-o format is "FORMAT"

Die Namen "format" hängen dann halt von deinen tatsächlichen Formatnamen ab und der Zugriff erweitert sich leider mit

feld of format-i
feld of format-o