Lots of times these are due to a leaky EVAP canister or it's charcoal has loosened into a sludge and has how sucked into that purge valve and line - you can fix the valve all you want, the sensor looking at the system to develop a vacuum is not seeing changes - so replacing that sensor is oftentimes overlooked - then replaced - does that fix it, maybe - until the plugged lines don't show any results? Er well then, no - the lines to and from the EVAP canister and it's charcoal "bag" need to be inspected and even replaced, and the bag with fresh charcoal.
This code occurs or sets when the system gets overfilled too many times or the fuel boils - so the vapors change the profile present as a pressure gradient curve measured by the built in EVAP expected change in pressure moments - is different than the expected - so it sets a code.
A Change in fuel (since were into Ethanol and Methanol now) might be causing this so a trip to the service department to make sure your system is flashed with the correct fuel pressure Emission profile (A version type) so the changes of the DIFFERENCES the pressurizing the system tries to do - can be correctly determined instead of an older standard the OEM was.
This came up in several types of cars using Turbo'd systems - like the ECO-boost motor series because the vacuum pressure expected was not being developed correctly. So they changed the profile to better match the expected results, turns off a code and the Check Engine light - and everyone breathes a sigh of relief.
Using FOR-Scan for corrections - remember it writes data no matter the condition - so if the system sees changes - it may take a while for the system to recover some of the overwritten data and put you back to square one - turning the light back on once you thought it was off for good.