If the job is running on a zOS machine, then you should look at the DD name for these phantom objects and look at the JCL (Job Control Language) for this JCL Paramater:
// DISP=
If you do not see it then the default is DISP=(NEW,PASS,PASS) which means created the dataset as new, if the job step is return code zero pass it to the next step as a temporary dataset name. You should see a dataset that begins with && followed by system generated specifics...this will pass from step to step until the job ends at which point the last disposition state will PASS the temporary file to the proverbial "Bit Bucket" and you will never see it again.
If you want to make the job restart able from the top you can add a first job step the invokes PGM=IEFBR14 and in that step allocate a DDNAME of your choice with the dataset name you prefer and use the disposition of (MOD,DELETE,DELETE). This will allocate the dataset if it exists, if not it will delete it if the job ends normally or fails. When you get to the step in your job where you want to create the data for this same dataset you can use the disposition of (NEW,CATLG,DELETE). With this disposition coded the dataset will be cataloged and will only be deleted (sent to the bit bucket), if the job fails (see 3rd parameter DELETE). If you want you read the data into a subsequent job step you can use the disposition of DISP=SHR, or DISP=OLD as the other two positions are KEEP,KEEP and when the job ends your data will be there when it ends normally. This will also allow you to restart the job from the top and avoid a possible "NOT CATLALOGUED 2" condition which you may experience as well. This technique will only work on a zOS platform. If your platform is not zOS, S390, MVS then you need to consult the publication that supports your particular platform for an example that provides a similar solution.