Hi,
The CANCEL command is used when you are calling a subprogram dynamically.When u issue cancel command after a dynamic call to subprogram,it will refresh or reset all the parameters that got updated in subprogram.
As Sunnyk stated these things seem to happen and from one perspective it's not "wrong" to think that.
But what actually happens is that the current version of the CALLed pgm is CANCELed, that is, it's no longer active. The memory originally allocated to that version is freed and becomes available to the next requestor and the next CALL of that pgm is loaded from disk and must compete for task memory (which may or may not be available then).
Because of this load all Working storage appears to be reinitialized. In fact the pgm is reloaded with its original WS contents.