Datastore Editing Not Working

I’m trying to make a script that can edit a player’s datastore even if they are not online.

Changing Script:

local DataStoreService = game:GetService("DataStoreService")
local myDataStore = DataStoreService:GetDataStore("myDataStore")

game.ReplicatedStorage.ChangeStat.OnServerEvent:Connect(function(player,PlayerID,Value)
	print(PlayerID)
	print(Value)
	local playerUserId = "Player_"..PlayerID
	for i,v in pairs(game:GetService("Players"):GetChildren()) do
		if v.UserId == tonumber(PlayerID) then
			v.leaderstats.USD.Value = Value
		end
	end
	local data = player.leaderstats.USD.Value
	local datastore = myDataStore:SetAsync(playerUserId, data)
end)

Datastore script:

local DataStoreService = game:GetService("DataStoreService")
local myDataStore = DataStoreService:GetDataStore("myDataStore")

game.Players.PlayerAdded:Connect(function(player)
	
	local leaderstats = Instance.new("Folder")
	leaderstats.Name = "leaderstats"
	leaderstats.Parent = player
	
	local Cash = Instance.new("IntValue")
	Cash.Name = "USD"
	Cash.Parent = leaderstats
	
	local playerUserId = "Player_"..player.UserId
	
	local data
	local success, errormessage = pcall(function()
		data = myDataStore:GetAsync(playerUserId)
	end)
	
	if success then
		Cash.Value = data
	end
end)

game.Players.PlayerRemoving:Connect(function(player)
	local data = player.leaderstats.USD.Value
	local playerUserId = "Player_"..player.UserId
	
	local success, errormessage = pcall(function()
		myDataStore:SetAsync(playerUserId, data)
	end)
	
	if success then
		print("Data Successfully saved!")
	else
		print("Error")
		warn(errormessage)
	end
end)

When I use the script, and then join the game on the account it changed, my stats are always set to 0.

The PlayerID is gathered through a textbox, and judging how my value will be set to 0 upon joining, that part seems to be working fine.