JavaScript, 247 204200 bytes
n=s=>{r=s.match(/\w\d+/g)
x=y=z=0
e=""
for(d of r){a=d[0]
b=d.slice(1)
while(b--){
y+=a=="N"
y-=a=="S"
x+=a=="E"
x-=a=="W"
p=`(${x}p=[x,${y})`y]+";"
if(~e.indexOf(p))if(!x&!y)z++
else return 0
e+=p}}return!x&!y&!z}
function n(s)
{
var dir = s.match(/\w\d+/g);
var x = y = z = 0;
var been = "";
for (d of dir)
{
var a = d[0];
var b = 1*d.substring(1);
while(b-- > 0)
{
if (a == "N") y++;
if (a == "S") y--;
if (a == "E") x++;
if (a == "W") x--;
var pt = "(" + x + "[x," + yy] + ")";";";
if (~been.indexOf(pt))
if (x==0 && y==0)
z++;
else
return false;
been += pt;
}
}
return (x == 0 && y==0 && z == 0);
}
n=s=>{r=s.match(/\w\d+/g)
x=y=z=0
e=""
for(d of r){a=d[0]
b=d.slice(1)
while(b--){
y+=a=="N"
y-=a=="S"
x+=a=="E"
x-=a=="W"
p=`(${x}p=[x,${y})`y]+";"
if(~e.indexOf(p))if(!x&!y)z++
else return 0
e+=p}}return!x&!y&!z}
console.log(n("N1E1S1W1"))
console.log(n("N1E1N1E1S2W2"))
console.log(n("N1S1E1W1"))
console.log(n("N4E2S2W4S2E2"))
console.log(n("N3E2S3"))